7 releases (breaking)
0.6.0 | Sep 20, 2024 |
---|---|
0.5.1 | Feb 26, 2024 |
0.5.0 | Nov 25, 2023 |
0.4.0 | Apr 2, 2023 |
0.1.0 | Apr 25, 2022 |
#116 in Database interfaces
12,619 downloads per month
Used in 13 crates
(12 directly)
25KB
416 lines
tokio-rusqlite
Asynchronous handle for rusqlite library.
Usage
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(())
}
Safety
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% safe Rust.
License
This project is licensed under the MIT license.
Dependencies
~30MB
~473K SLoC