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 中使用
69KB
2K SLoC
sqlmo
sqlmo
是一组用于表示 SQL 表和查询的原始数据。使用这些原始数据来
- 自动生成迁移:以标准化的形式加载 SQL 表示形式(
sqlmo::Schema
),计算模式之间的差异(sqlmo::Migration
),然后生成应用迁移的 SQL(sqlmo::Migration::to_sql
)。 - 构建 SQL 查询:在数据模型中表示 SQL 查询,以创建查询生成的 API。然后,生成 SQL 查询。注意:此库(目前)不支持解析 SQL 查询。
对于自动生成迁移,有几个内置的模式来源
- Postgres:
sqlmo_sqlx
- OpenAPI v3:
sqlmo_openapi
如果您需要其他来源,您应定义一种从您的数据源构建 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