Crates.io | tokio-rusqlite |
lib.rs | tokio-rusqlite |
version | 0.6.0 |
source | src |
created_at | 2022-04-25 19:06:16.371153 |
updated_at | 2024-09-20 06:16:31.337683 |
description | Asynchronous handle for rusqlite library. |
homepage | https://github.com/programatik29/tokio-rusqlite |
repository | https://github.com/programatik29/tokio-rusqlite |
max_upload_size | |
id | 574050 |
size | 47,812 |
Asynchronous handle for rusqlite library.
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(())
}
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% safe Rust.
This project is licensed under the MIT license.