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

#121 in Database interfaces

Download history 1634/week @ 2024-08-02 1596/week @ 2024-08-09 2049/week @ 2024-08-16 2575/week @ 2024-08-23 2109/week @ 2024-08-30 2476/week @ 2024-09-06 2662/week @ 2024-09-13 2877/week @ 2024-09-20 2837/week @ 2024-09-27 3123/week @ 2024-10-04 2487/week @ 2024-10-11 3314/week @ 2024-10-18 3033/week @ 2024-10-25 2961/week @ 2024-11-01 3424/week @ 2024-11-08 3252/week @ 2024-11-15

13,266 downloads per month
Used in 13 crates (12 directly)

MIT license

25KB
416 lines

License Crates.io Docs - Stable

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