⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
Rust API

Installation

DuckDB Rust API 可以从 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。在通常情况下,这两者之间没有太大区别,但在出现错误的情况下,您将有机会通过显式关闭来处理它。

Querying

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

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(())
}