#sql-database #sqlx #schema #schema-file #structuresql

database-schema

一个将数据库模式导出到SQL格式的文件的库

4个版本

0.2.0 2024年1月18日
0.1.2 2023年8月30日
0.1.1 2023年8月29日
0.1.0 2023年8月28日

#2264 in 数据库接口

MIT/Apache

46KB
750

database-schema

CI Status docs.rs crates.io MIT licensed

这个crate提供了一个简单的方法将数据库结构导出到一个文件中,格式为SQL。

它受到了ruby on rails 模式导出的启发。

使用方法

use std::path::PathBuf;

database_schema::generate_without_runtime_using_defaults!();

功能标志

database-schema 使用一系列 功能标志 来减小库的大小,从而减小您的二进制文件的大小。使用此包的方式是选择适合其用例的正确功能标志组合。以下是可以用到的功能标志列表和为每个用例推荐的组合。

  • sqlite: 启用SQLite支持。
  • postgres: 启用PostgreSQL支持。
  • mysql: 启用MySQL支持。
  • sqlx: 启用 sqlx 支持。
  • diesel: 启用 diesel 支持。

功能标志矩阵

数据库 查询构建器 运行时
sqlite sqlx runtime-async-std
sqlite sqlx runtime-tokio
sqlite diesel
mysql sqlx runtime-async-std
mysql sqlx runtime-tokio
mysql diesel
postgres sqlx runtime-async-std
postgres sqlx runtime-tokio
postgres diesel

组合功能标志

以下是为每个用例推荐的功能标志组合。

首先选择以下数据库功能标志之一

  • sqlite
  • mysql
  • postgres

然后选择以下数据库查询构建功能标志之一

  • sqlx
  • diesel

如果您使用 sqlx,您还必须选择以下运行时功能标志之一

  • runtime-async-std
  • runtime-tokio

示例

[dependencies]
database-schema = { version = "0.1", features = ["sqlite", "sqlx", "runtime-async-std"] }

或者,如果您使用 diesel

[dependencies]
database-schema = { version = "0.1", features = ["sqlite", "diesel"] }

这个crate还提供了一组宏,可以在编译时生成数据库的SQL结构。这对于从 build.rs 生成SQL非常有用。

[dependencies]
database-schema = { version = "0.1", features = ["sqlite", "diesel", "macros"] }
use database_schema::generate_without_runtime;

let sql = generate_without_runtime!("./migrations", "structure.sql");

上述代码严格等同于调用

use database_schema::generate_without_runtime_using_defaults;

let sql = generate_without_runtime!();

定制

use database_schema::DatabaseSchemaBuilder;

let migrations_path = "db/migrations";
let destination_path = "db/structure.sql";

// This assumes you're using SQLite in memory.
//
// If you need to set up a `connection_url` you can use
// `DatabaseSchemaBuilder::connection_url` before calling
// `build()`.

DatabaseSchemaBuilder::new()
    .migrations_dir(migrations_path)?
    .destination_path(destination_path)
    .build()
    .dump()
    .await

依赖

~2–21MB
~324K SLoC