2 个不稳定版本
0.2.0 | 2024年5月13日 |
---|---|
0.1.9 | 2023年12月8日 |
450 在 数据库接口
85 每月下载量
77KB
1.5K SLoC
基于 tiberius 的简单易用的 MS SQL Server 基础 ORM。
此 crate 仍在建设中,API 可能会发生变化。
有关完整文档,请访问 doc.rs。
快速浏览
在定义结构体时,请确保字段顺序与数据库中的顺序一致,因为批量插入(insert_many)依赖于它。
use ssql::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(ORM, Debug, Default, Serialize, Deserialize)]
#[ssql(table = Person, schema = SCHEMA1)] // other schema
struct Person {
#[ssql(primary_key)]
id: i32,
email: Option<String>, // wrap nullable column in option
}
#[derive(ORM, Debug, Default, Serialize, Deserialize)]
#[ssql(table = Posts)] // default schema
struct Posts {
id: i32,
post: String,
#[ssql(foreign_key = "SCHEMA1.Person.id")] // if it belongs to default schema, just write TABLE.COLUMN
person_id: i32,
}
async fn _get<'a>(client: &'a mut tiberius::Client<Compat<TcpStream>>) -> SsqlResult<()> {
let mut query = Person::query();
// return Vec<Person>
let vec1 = query.all(client).await?;
// return Vec<Value>
let js = query.json(client).await?;
// return Polars DataFrame
let df = query.df(client).await?;
// return Vec<(Person, Posts)>
let query = query.left_join::<Posts>();
let vec2 = query.all(client).await?;
Ok(())
}
待办事项
- 处理多对多关系
- 构建过滤模式
- 支持原始 SQL 字符串查询
- 处理非手动输入键,如自动生成的 ID
- 处理
GROUP BY
聚合 - 支持装饰列的过滤,例如
WHERE YEAR(datetime_col) = ?
依赖关系
~8–20MB
~327K SLoC