#tokio #sqlite #async #rusqlite

async-sqlite

A library for working with sqlite asynchronously

10 releases (5 breaking)

0.5.1 Apr 22, 2025
0.5.0 Feb 7, 2025
0.4.0 Jan 14, 2025
0.3.1 Jul 23, 2024
0.0.1 Jun 25, 2023

#222 in Database interfaces

Download history 803/week @ 2025-01-13 756/week @ 2025-01-20 691/week @ 2025-01-27 1377/week @ 2025-02-03 1406/week @ 2025-02-10 1451/week @ 2025-02-17 7705/week @ 2025-02-24 1842/week @ 2025-03-03 1707/week @ 2025-03-10 1552/week @ 2025-03-17 1701/week @ 2025-03-24 15489/week @ 2025-03-31 1855/week @ 2025-04-07 2072/week @ 2025-04-14 2115/week @ 2025-04-21 2084/week @ 2025-04-28

8,302 downloads per month
Used in 22 crates (2 directly)

MIT license

30KB
460 lines

async-sqlite

A library to interact with sqlite from an async context.

This library is tested on both tokio and async_std, however it should be compatible with all async runtimes.

Install

Add async-sqlite to your "dependencies" in your Cargo.toml file.

This can be done by running the command:

cargo add async-sqlite

Usage

A Client represents a single background sqlite3 connection that can be called concurrently from any thread in your program.

To create a sqlite client and run a query:

use async_sqlite::{ClientBuilder, JournalMode};

let client = ClientBuilder::new()
                .path("/path/to/db.sqlite3")
                .journal_mode(JournalMode::Wal)
                .open()
                .await?;

let value: String = client.conn(|conn| {
    conn.query_row("SELECT val FROM testing WHERE id=?", [1], |row| row.get(0))
}).await?;

println!("Value is: {value}");

A Pool represents a collection of background sqlite3 connections that can be called concurrently from any thread in your program.

To create a sqlite pool and run a query:

use async_sqlite::{JournalMode, PoolBuilder};

let pool = PoolBuilder::new()
              .path("/path/to/db.sqlite3")
              .journal_mode(JournalMode::Wal)
              .open()
              .await?;

let value: String = pool.conn(|conn| {
    conn.query_row("SELECT val FROM testing WHERE id=?", [1], |row| row.get(0))
}).await?;

println!("Value is: {value}");

Cargo Features

This library tries to export almost all features that the underlying rusqlite library contains.

A notable difference is that the bundled feature is enabled by default, but can be disabled with the following line in your Cargo.toml:

async-sqlite = { version = "*", default-features = false }

Dependencies

~25MB
~478K SLoC