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