1 unstable release
Uses new Rust 2024
0.1.0 | Mar 8, 2025 |
---|
#590 in Database interfaces
121 downloads per month
25KB
446 lines
xext-sql
一个简单易用的 SQLite 数据库操作库,提供了更安全和便捷的 API。
特性
- 内存数据库和文件数据库支持
- 只读模式和内存限制设置
- 事务处理
- 便捷的查询和数据转换
- 表结构信息获取
- 索引管理和优化
- 批量数据操作
安装
将以下内容添加到您的 Cargo.toml
文件中:
[dependencies]
xext-sql = "0.1.0"
快速开始
use xext_sql::{Database, DatabaseConfig, FromRow, params};
use anyhow::Result;
// 定义用户结构体
#[derive(Debug)]
struct User {
id: i32,
name: String,
email: Option<String>,
age: Option<i32>,
}
// 为结构体实现 FromRow 特征
impl<'a> FromRow<'a> for User {
fn from_row(row: &'a rusqlite::Row) -> Result<Self> {
Ok(Self {
id: row.get(0)?,
name: row.get(1)?,
email: row.get(2)?,
age: row.get(3)?,
})
}
}
fn main() -> Result<()> {
// 创建内存数据库
let config = DatabaseConfig::memory();
let mut db = Database::new(config)?;
// 创建用户表
db.execute(
"CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT,
age INTEGER
)",
&[],
)?;
// 插入数据
db.execute(
"INSERT INTO users (id, name, email, age) VALUES (?, ?, ?, ?)",
params![1, "张三", "zhangsan@example.com", 30],
)?;
// 查询数据
let user: User = db.query_row(
"SELECT id, name, email, age FROM users WHERE id = ?",
params![1],
)?;
println!("用户: {:?}", user);
Ok(())
}
更多示例
查看 examples 目录获取更多示例。
事务处理
// 开始事务
let tx = db.transaction()?;
// 在事务中执行操作
tx.execute(
"INSERT INTO users (id, name) VALUES (?, ?)",
params![2, "李四"],
)?;
// 提交事务
tx.commit()?;
// 或者回滚事务
// tx.rollback()?;
批量插入
use rusqlite::types::ToSql;
// 准备批量插入的数据
let columns = vec!["id", "name", "email"];
let mut values: Vec<Vec<Box<dyn ToSql>>> = Vec::new();
values.push(vec![
Box::new(3),
Box::new("王五".to_string()),
Box::new(Some("wangwu@example.com".to_string())),
]);
// 执行批量插入,每批 10 条数据
db.batch_insert("users", &columns, &values, 10)?;
许可证
本项目采用 MIT 或 Apache-2.0 双许可证。
Dependencies
~22MB
~422K SLoC