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 数据库接口
每月下载量 28,157
用于 290 个crates (73直接)
55KB
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"));
}
贡献
您的贡献非常受欢迎。请不要犹豫,打开一个issue或pull request。请注意,任何提交给项目包含的贡献都将根据LICENSE.md中的条款进行许可。
依赖项
~0.2–1.7MB
~35K SLoC