2个版本
0.1.1 | 2024年7月22日 |
---|---|
0.1.0 | 2024年7月6日 |
#2228 在 数据库接口
127 每月下载量
185KB
3K SLoC
sqlx-template
sqlx-template
是一个Rust库,利用宏根据 sqlx
框架生成数据库查询函数。它旨在提供一种灵活、简单的方式来与MySQL、Postgres和SQLite等数据库交互。
特性
- 根据字段生成select、insert、update、delete和order by查询的函数。
- 各种返回类型,如计数、分页、流式传输、返回(仅限Postgres)、fetch_one、fetch_all和rows_affected。
- 所有生成的查询函数都在文档中包含相应的代码。
- 支持事务和乐观锁模板。
- 支持使用命名参数自定义查询,并能够执行多个查询。
- 从文件导入查询。
- 支持对查询和执行时间进行自定义日志记录和调试。
- 编译时查询语法验证。
要求
- 生成的函数依赖于
sqlx
crate,因此在使用此库之前,您需要将其添加到依赖项中。 - 数据库中的列必须与结构体中字段的名称和数据类型匹配。
- 结构体需要派生
sqlx::FromRow
和TableName
。
示例代码
use sqlx_template::{multi_query, query, select, update, DeleteTemplate, SelectTemplate, TableName, UpdateTemplate};
#[derive(sqlx::FromRow, InsertTemplate, UpdateTemplate, SelectTemplate, DeleteTemplate, TableName)]
#[debug_slow = 1000]
#[table_name = "users"]
#[tp_delete(by = "id")]
#[tp_delete(by = "id, email")]
#[tp_select_all(by = "id, email", order = "id desc")]
#[tp_select_one(by = "id", order = "id desc", fn_name = "get_last_inserted")]
#[tp_select_one(by = "email")]
#[tp_select_page(by = "org", order = "id desc, org desc")]
#[tp_select_count(by = "id, email")]
#[tp_update(by = "id", op_lock = "version", fn_name = "update_user")]
#[tp_select_stream(order = "id desc")]
#[tp_select_stream(by = "email", order = "id desc")]
pub struct User {
#[auto]
id: i32,
email: String,
password: String,
org: Option<i32>,
active: bool,
#[auto]
version: i32,
created_by: Option<String>,
#[auto]
created_at: DateTime<Utc>,
updated_by: Option<String>,
updated_at: Option<DateTime<Utc>>,
}
#[select("
SELECT name, age
FROM users
WHERE name = :name and age = :age
")]
pub async fn query_user_info(name: String, age: i32) -> Stream<(String, i16)> {}
#[multi_query(file = "sql/init.sql", 0)]
async fn migrate() {}
有关更多详细信息,请参阅仓库中的示例。
特性
postgres
: 针对PostgreSQL数据库。mysql
: 针对MySQL数据库。sqlite
: 针对SQLite数据库。tracing
: 使用tracing::debug!
宏进行日志记录(需要将tracing
crate 添加到Cargo.toml
)。log
: 使用log::debug!
宏进行日志记录(需要将log
crate 添加到Cargo.toml
)。
注意
- 如果您遇到由库中宏引起的错误,请尝试通过复制函数文档中的生成代码来重新生成函数。如果文档不可用,大多数错误都是由于语法问题、错误的变量名、列名或文件路径引起的。
debug_slow
适用于所有使用结构体派生宏的属性。可以通过在属性本身中声明debug_slow
属性来覆盖它。要禁用它,请显式设置debug_slow = -1
。- 默认情况下,如果没有声明
tracing
或log
功能,信息将通过println!
宏打印到屏幕上。
待办事项
- 添加更多测试和示例代码。
- 支持更多类型的参数
- 更多语法检查
- 与
sqlx::query!
宏集成 - 为
multi_query
宏提供更好的接口
许可证
本项目遵循Apache 2.0许可证。
贡献
欢迎所有PR。
依赖关系
~4.5MB
~91K SLoC