3个版本 (重大更改)
0.4.0 | 2023年8月30日 |
---|---|
0.3.0 | 2023年5月7日 |
0.1.0 | 2023年5月1日 |
1346 在 数据库接口
每月下载量 69
在 sqliter 中使用
18KB
242 行
async-rusqlite
一个微小、无执行器依赖的库,用于在异步环境中使用 rusqlite
。这实际上只是在长生存线程上启动一个 rusqlite
并将闭包发送到该线程以操作它。
此库受 tokio-rusqlite
的启发,但有以下设计差异
- 无执行器依赖;可以使用
tokio
、async-std
或其他任何东西。 - 有限通道;
tokio-rusqlite
使用无限通道将消息发送到rusqlite
线程。此库使用有限通道以允许在数据库无法跟上调用时将背压传播回异步任务。 - 依赖项较少;除了
rusqlite
之外,引入的附加依赖项树为 1(《asyncified》,它本身非常小)。
如果你不在乎上面的内容,更喜欢 tokio-rusqlite
,它经过了更多实战测试,并依赖于受人尊敬的 crossbeam-channel
而不是我在 asyncified
中的相当天真的通道实现。
use async_rusqlite::Connection;
#[derive(Debug)]
struct Person {
id: i32,
name: String,
data: Option<Vec<u8>>,
}
let conn = Connection::open_in_memory().await?;
conn.call(|conn| {
conn.execute(
"CREATE TABLE person (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
data BLOB
)",
(),
)
}).await?;
let me = Person {
id: 0,
name: "Steven".to_string(),
data: None,
};
conn.call(move |conn| {
conn.execute(
"INSERT INTO person (name, data) VALUES (?1, ?2)",
(&me.name, &me.data),
)
}).await?;
依赖项
~22MB
~423K SLoC