45 个版本
0.16.0-rc.1 | 2024年8月9日 |
---|---|
0.15.0-rc.7 | 2024年6月19日 |
0.15.0-rc.4 | 2024年3月24日 |
0.14.1 | 2023年9月14日 |
0.2.3 | 2021年6月19日 |
#79 在 数据库接口
每月 146,126 次下载
用于 78 个 Crates(直接使用 4 个)
3MB
8K SLoC
关于
SeaSchema 是一个用于帮助您管理 MySQL、Postgres 和 SQLite 数据库模式的库。它提供:1) 用于表示数据库模式映射的类型定义,每个数据库都与之紧密相连;2) 用于发现它们的实用工具。
如果您喜欢我们所做的工作,请考虑为我们点赞、评论、分享并贡献!
加入我们的 Discord 服务器,与其他 SeaQL 社区成员交流!
架构
该包分为不同的模块
def
:类型定义query
、parser
:用于查询和解析 information_schemadiscovery
:连接到实时数据库并发现Schema
writer
:用于将Schema
导出为 SeaQuery 和 SQL 语句
可以使用 with-serde
启用类型定义上的 JSON 序列化和反序列化。
模式发现
以 MySQL 的 Sakila 示例数据库 为例,给定以下表
CREATE TABLE film_actor (
actor_id SMALLINT UNSIGNED NOT NULL,
film_id SMALLINT UNSIGNED NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (actor_id,film_id),
KEY idx_fk_film_id (`film_id`),
CONSTRAINT fk_film_actor_actor FOREIGN KEY (actor_id) REFERENCES actor (actor_id) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT fk_film_actor_film FOREIGN KEY (film_id) REFERENCES film (film_id) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
TableDef {
info: TableInfo {
name: "film_actor",
engine: InnoDb,
auto_increment: None,
char_set: Utf8Mb4,
collation: Utf8Mb40900AiCi,
comment: "",
},
columns: [
ColumnInfo {
name: "actor_id",
col_type: SmallInt(
NumericAttr {
maximum: None,
decimal: None,
unsigned: Some(true),
zero_fill: None,
},
),
null: false,
key: Primary,
default: None,
extra: ColumnExtra {
auto_increment: false,
on_update_current_timestamp: false,
generated: false,
default_generated: false,
},
expression: None,
comment: "",
},
ColumnInfo {
name: "film_id",
col_type: SmallInt(
NumericAttr {
maximum: None,
decimal: None,
unsigned: Some(true),
zero_fill: None,
},
),
null: false,
key: Primary,
default: None,
extra: ColumnExtra {
auto_increment: false,
on_update_current_timestamp: false,
generated: false,
default_generated: false,
},
expression: None,
comment: "",
},
ColumnInfo {
name: "last_update",
col_type: Timestamp(TimeAttr { fractional: None }),
null: false,
key: NotKey,
default: Some(ColumnDefault::CurrentTimestamp),
extra: ColumnExtra {
auto_increment: false,
on_update_current_timestamp: true,
generated: false,
default_generated: true,
},
expression: None,
comment: "",
},
],
indexes: [
IndexInfo {
unique: false,
name: "idx_fk_film_id",
parts: [
IndexPart {
column: "film_id",
order: Ascending,
sub_part: None,
},
],
nullable: false,
idx_type: BTree,
comment: "",
functional: false,
},
IndexInfo {
unique: true,
name: "PRIMARY",
parts: [
IndexPart {
column: "actor_id",
order: Ascending,
sub_part: None,
},
IndexPart {
column: "film_id",
order: Ascending,
sub_part: None,
},
],
nullable: false,
idx_type: BTree,
comment: "",
functional: false,
},
],
foreign_keys: [
ForeignKeyInfo {
name: "fk_film_actor_actor",
columns: [ "actor_id" ],
referenced_table: "actor",
referenced_columns: [ "actor_id" ],
on_update: Cascade,
on_delete: Restrict,
},
ForeignKeyInfo {
name: "fk_film_actor_film",
columns: [ "film_id" ],
referenced_table: "film",
referenced_columns: [ "film_id" ],
on_update: Cascade,
on_delete: Restrict,
},
],
}
许可证
许可协议为以下之一
- Apache 许可协议第 2 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可协议定义的,您提交给作品的所有有意贡献,应按上述方式双许可,不附加任何额外的条款或条件。
SeaSchema 是一个由社区驱动的项目。我们欢迎您参与、贡献,共同为 Rust 的未来努力。
向我们的贡献者致敬!
依赖项
~1–17MB
~241K SLoC