78个版本 (36个重大更改)

0.36.1 2024年8月4日
0.36.0 2024年4月25日
0.35.0 2024年4月21日
0.34.0 2024年3月10日
0.14.2 2015年7月31日

#14 in 数据库接口

Download history 8057/week @ 2024-05-04 7172/week @ 2024-05-11 6323/week @ 2024-05-18 6582/week @ 2024-05-25 8157/week @ 2024-06-01 5631/week @ 2024-06-08 8746/week @ 2024-06-15 6804/week @ 2024-06-22 5643/week @ 2024-06-29 8405/week @ 2024-07-06 8122/week @ 2024-07-13 8370/week @ 2024-07-20 6917/week @ 2024-07-27 6362/week @ 2024-08-03 8118/week @ 2024-08-10 5083/week @ 2024-08-17

每月下载量 28,157
用于 290 个crates (73直接)

Apache-2.0 OR MIT

55KB
1K SLoC

SQLite Package Documentation Build

该软件包提供了对SQLite的接口。

示例

打开一个连接,创建一个表,并插入几行数据

let connection = sqlite::open(":memory:").unwrap();

let query = "
    CREATE TABLE users (name TEXT, age INTEGER);
    INSERT INTO users VALUES ('Alice', 42);
    INSERT INTO users VALUES ('Bob', 69);
";
connection.execute(query).unwrap();

选择一些行,并以纯文本形式逐个处理,这通常效率不高

let query = "SELECT * FROM users WHERE age > 50";

connection
    .iterate(query, |pairs| {
        for &(name, value) in pairs.iter() {
            println!("{} = {}", name, value.unwrap());
        }
        true
    })
    .unwrap();

使用预处理语句运行相同的查询,这比之前的技术更有效

use sqlite::State;

let query = "SELECT * FROM users WHERE age > ?";
let mut statement = connection.prepare(query).unwrap();
statement.bind((1, 50)).unwrap();

while let Ok(State::Row) = statement.next() {
    println!("name = {}", statement.read::<String, _>("name").unwrap());
    println!("age = {}", statement.read::<i64, _>("age").unwrap());
}

使用游标运行相同的查询,它是可迭代的

let query = "SELECT * FROM users WHERE age > ?";

for row in connection
    .prepare(query)
    .unwrap()
    .into_iter()
    .bind((1, 50))
    .unwrap()
    .map(|row| row.unwrap())
{
    println!("name = {}", row.read::<&str, _>("name"));
    println!("age = {}", row.read::<i64, _>("age"));
}

贡献

您的贡献非常受欢迎。请不要犹豫,打开一个issue或pull request。请注意,任何提交给项目包含的贡献都将根据LICENSE.md中的条款进行许可。

依赖项

~0.2–1.7MB
~35K SLoC