2个版本

0.1.1 2024年7月22日
0.1.0 2024年7月6日

#2228数据库接口

Download history 121/week @ 2024-07-05 6/week @ 2024-07-12 107/week @ 2024-07-19 19/week @ 2024-07-26 1/week @ 2024-08-02

127 每月下载量

MIT/Apache

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::FromRowTableName

示例代码

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
  • 默认情况下,如果没有声明tracinglog功能,信息将通过println!宏打印到屏幕上。

待办事项

  • 添加更多测试和示例代码。
  • 支持更多类型的参数
  • 更多语法检查
  • sqlx::query!宏集成
  • multi_query宏提供更好的接口

许可证

本项目遵循Apache 2.0许可证。

贡献

欢迎所有PR。

依赖关系

~4.5MB
~91K SLoC