⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
Rust 客户端

DuckDB Rust 客户端的最新版本是 1.3.2。

安装

DuckDB Rust 客户端可以从 crates.io 安装。有关详细信息,请参阅 docs.rs

基本 API 用法

duckdb-rs 是基于 DuckDB C API 的一个符合人体工程学的包装器,请参阅 README 获取详细信息。

启动与关闭

要使用 duckdb,您必须首先使用 Connection::open() 初始化一个 Connection 句柄。Connection::open() 将要读写数据的数据库文件作为参数。如果数据库文件不存在,它将被创建(文件扩展名可以是 .db.duckdb 或其他任何后缀)。您也可以使用 Connection::open_in_memory() 来创建内存数据库。请注意,对于内存数据库,数据不会持久化到磁盘(即,当您退出进程时,所有数据都将丢失)。

use duckdb::{params, Connection, Result};
let conn = Connection::open_in_memory()?;

Connection 超出作用域时(通过 Drop),它将自动为您关闭底层数据库连接。您也可以使用 conn.close() 显式关闭 Connection。在典型情况下,这两种方式之间没有太大区别,但如果发生错误,您将有机会通过显式关闭来处理它。

查询

SQL 查询可以使用连接的 execute() 方法发送到 DuckDB,或者我们也可以预处理语句然后再进行查询。

#[derive(Debug)]
struct Person {
    id: i32,
    name: String,
    data: Option<Vec<u8>>,
}

conn.execute(
    "INSERT INTO person (name, data) VALUES (?, ?)",
    params![me.name, me.data],
)?;

let mut stmt = conn.prepare("SELECT id, name, data FROM person")?;
let person_iter = stmt.query_map([], |row| {
    Ok(Person {
        id: row.get(0)?,
        name: row.get(1)?,
        data: row.get(2)?,
    })
})?;

for person in person_iter {
    println!("Found person {:?}", person.unwrap());
}

追加器

Rust 客户端支持 DuckDB Appender API 用于批量插入。例如

fn insert_rows(conn: &Connection) -> Result<()> {
    let mut app = conn.appender("foo")?;
    app.append_rows([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])?;
    Ok(())
}