#postgresql #sqlx #generation #sql-query #schema #model #sqlmo

sqlmo_sqlx

创建从 sqlx 数据库(目前仅限 postgres)生成 sqlmo 模型的库

5 个版本 (破坏性更新)

0.17.0 2024年6月2日
0.16.1 2023年7月29日
0.15.0 2023年7月19日
0.14.0 2023年7月14日
0.1.0 2023年7月12日

#2888 in 数据库接口

每月35次 下载
2 crates 中使用

MIT 许可证

69KB
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);
    }
}

路线图

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

依赖项

~12–25MB
~382K SLoC