#sql-query #sql-database #database-schema #database-migrations #orm #postgresql #migration

sqlmo

SQL 数据原语。使用它来生成 SQL 查询、自动生成 SQL 迁移等。

31 个版本

新增 0.17.2 2024 年 8 月 22 日
0.17.0 2024 年 6 月 2 日
0.16.3 2023 年 11 月 11 日
0.16.2 2023 年 7 月 29 日
0.11.2 2023 年 3 月 27 日

#653数据库接口

Download history 54/week @ 2024-04-29 204/week @ 2024-05-06 63/week @ 2024-05-13 35/week @ 2024-05-20 125/week @ 2024-05-27 137/week @ 2024-06-03 43/week @ 2024-06-10 22/week @ 2024-06-17 40/week @ 2024-06-24 4/week @ 2024-07-01 21/week @ 2024-07-08 44/week @ 2024-07-15 12/week @ 2024-07-22 290/week @ 2024-07-29 27/week @ 2024-08-05 41/week @ 2024-08-12

每月下载量 376
12 个 Crates 中使用 (直接使用 10 个)

MIT 许可

62KB
2K SLoC

GitHub Contributors Stars Build Status Downloads Crates.io

sqlmo

sqlmo 是一组用于表示 SQL 表和查询的原始数据。使用这些原始数据

  • 自动生成迁移:以标准化的形式加载 SQL 表示形式 (sqlmo::Schema),计算模式之间的差异 (sqlmo::Migration),并生成应用迁移的 SQL (sqlmo::Migration::to_sql)。
  • 构建 SQL 查询:以数据模型的形式表示 SQL 查询,以创建查询生成的 API。然后,生成 SQL 查询。注意:此库(目前)不支持解析 SQL 查询。

对于自动生成迁移,有一些内置的模式来源

如果您需要其他来源,您应该定义一种从您的数据源构建 sqlmo::Schema 的方法,然后使用 sqlmo 自动生成迁移。

当前支持此功能的项目

如果您使用此库,请提交 PR 以将其添加到此列表。

使用方法

此示例从 postgres 数据库读取模式,定义一个空的模式(应填写),然后计算应用到的数据库的迁移。

use sqlmo_sqlx::FromPostgres;

#[tokio::main]
async fn main() {
    let url = std::env::var("DATABASE_URL").unwrap();
    let mut conn = sqlx::postgres::PgConnection::connect(&url).await?;
    let current = Schema::try_from_postgres(&mut conn, schema_name).await?;
    let end_state = Schema::default(); // Load your end-state by manually defining it, or building it from another source
    let migration = current.migrate_to(end_state, &sqlmo::Options::default());
    
    for statement in migration.statements {
        let statement = statement.to_sql(Dialect::Postgres);
        println!("{}", statement);
    }
}

路线图

  • 在计算迁移时,为列删除创建注释行
  • ? 在计算迁移时,通过计算列名之间的单词距离来更改列

依赖项

~105–390KB