2 个版本
0.0.2 | 2024 年 7 月 31 日 |
---|---|
0.0.1 | 2024 年 7 月 26 日 |
#707 在 数据库接口
每月 304 次下载
24KB
360 代码行
async-duckdb
注意:这是 RYAN FOWLER 的 async-sqlite
CRATE 的 SED/AWK 版本 (https://github.com/ryanfowler/async-sqlite);以下说明是原始 async-sqlite
说明的粗略改编。
注意:只能与 access_mode='read_only'
一起使用 https://duckdb.org/docs/connect/concurrency.html#handling-concurrency
注意:通过闭包将自定义配置提供给客户端/池,该闭包返回 duckdb-configuration 结构体。
一个用于从异步上下文与 duckdb 交互的库。
此库在 tokio 和 async_std 上进行了测试,但它应该与所有异步运行时兼容。
安装
将 async-duckdb
添加到您的 Cargo.toml 文件中的 "dependencies"。
这可以通过运行以下命令来完成
cargo add async-duckdb
用法
Client
代表单个后台 duckdb 连接,可以从您的程序中的任何线程并发调用。
创建 duckdb 客户端并运行查询
use async_duckdb::{ClientBuilder};
let client = ClientBuilder::new()
.path("/path/to/db.duckdb")
.open()
.await?;
let value: String = client.conn(|conn| {
conn.query_row("SELECT val FROM testing WHERE id=?", [1], |row| row.get(0))
}).await?;
println!("Value is: {value}");
Pool
代表一组后台 duckdb3 连接,可以从您的程序中的任何线程并发调用。
创建 duckdb 池并运行查询
use async_duckdb::{PoolBuilder};
let pool = PoolBuilder::new()
.path("/path/to/db.duckdb")
.open()
.await?;
let value: String = pool.conn(|conn| {
conn.query_row("SELECT val FROM testing WHERE id=?", [1], |row| row.get(0))
}).await?;
println!("Value is: {value}");
Cargo 功能
此库试图导出底层 duckdb 库几乎所有的功能。
一个显著的差异是,bundled
功能默认启用,但可以在 Cargo.toml 中禁用以下行
async-duckdb = { version = "*", default-features = false }
依赖关系
~22–33MB
~413K SLoC