2个版本

使用旧的Rust 2015

0.30.4 2023年1月31日
0.30.3 2022年12月15日

数据库接口 中排名第 1928

Download history 61/week @ 2024-03-11 89/week @ 2024-03-18 82/week @ 2024-03-25 70/week @ 2024-04-01 31/week @ 2024-04-08 22/week @ 2024-04-15 25/week @ 2024-04-22 10/week @ 2024-04-29 14/week @ 2024-05-06 20/week @ 2024-05-13 16/week @ 2024-05-20 19/week @ 2024-05-27 14/week @ 2024-06-03 44/week @ 2024-06-10 24/week @ 2024-06-17 22/week @ 2024-06-24

每月下载量 106
5 个Crate中使用(通过 lunatic-sqlite-api

Apache-2.0/MIT

52KB
1K SLoC

SQLite 包 文档 构建

该包提供对 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"));
}

贡献

非常欢迎您的贡献。请随时提出问题或发起拉取请求。请注意,任何提交给项目以包含的贡献都将根据LICENSE.md中给出的条款进行许可。

依赖项

~0.2–1.7MB
~36K SLoC