6个版本 (破坏性)
0.5.1 | 2024年2月26日 |
---|---|
0.5.0 | 2023年11月25日 |
0.4.0 | 2023年4月2日 |
0.3.0 | 2022年9月16日 |
0.1.0 | 2022年4月25日 |
#127 in 异步
7,802 每月下载量
用于 9 crates
25KB
406 行
tokio-rusqlite
rusqlite库的异步处理程序。
用法
use tokio_rusqlite::{params, Connection, Result};
#[derive(Debug)]
struct Person {
id: i32,
name: String,
data: Option<Vec<u8>>,
}
#[tokio::main]
async fn main() -> Result<()> {
let conn = Connection::open_in_memory().await?;
let people = conn
.call(|conn| {
conn.execute(
"CREATE TABLE person (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
data BLOB
)",
[],
)?;
let steven =
Person {
id: 1,
name: "Steven".to_string(),
data: None,
};
conn.execute(
"INSERT INTO person (name, data) VALUES (?1, ?2)",
params![steven.name, steven.data],
)?;
let mut stmt = conn.prepare("SELECT id, name, data FROM person")?;
let people = stmt
.query_map([], |row| {
Ok(Person {
id: row.get(0)?,
name: row.get(1)?,
data: row.get(2)?,
})
})?
.collect::<std::result::Result<Vec<Person>, rusqlite::Error>>()?;
Ok(people)
})
.await?;
for person in people {
println!("Found person {person:?}");
}
conn.close().await?;
Ok(())
}
安全性
此crate使用#![forbid(unsafe_code)]
确保所有内容都在100%安全的Rust中实现。
许可证
此项目采用MIT许可证。
依赖项
~25MB
~471K SLoC