⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
Rust 客户端

DuckDB Rust 客户端的最新稳定版本为 1.4.4。

安装

可以从 crates.io 安装 DuckDB Rust 客户端。详情请参阅 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,我们也可以预编译语句(prepare statement)然后在该语句上进行查询。

#[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());
}

Appender

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(())
}
© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南