#duck-db #async #tokio #async-context

async-duckdb

一个用于异步操作 duckdb 的库

2 个版本

0.0.2 2024 年 7 月 31 日
0.0.1 2024 年 7 月 26 日

#707数据库接口

Download history 108/week @ 2024-07-21 184/week @ 2024-07-28 7/week @ 2024-08-04 5/week @ 2024-08-11

每月 304 次下载

MIT 许可证

24KB
360 代码行

async-duckdb

注意:这是 RYAN FOWLER 的 async-sqlite CRATE 的 SED/AWK 版本 (https://github.com/ryanfowler/async-sqlite);以下说明是原始 async-sqlite 说明的粗略改编。

Crates.io Docs.rs License

注意:只能与 access_mode='read_only' 一起使用 https://duckdb.org/docs/connect/concurrency.html#handling-concurrency

注意:通过闭包将自定义配置提供给客户端/池,该闭包返回 duckdb-configuration 结构体。


一个用于从异步上下文与 duckdb 交互的库。

此库在 tokioasync_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