4个版本
0.1.6 | 2024年2月24日 |
---|---|
0.1.5 | 2024年2月23日 |
0.1.4 | 2023年8月17日 |
0.1.3 | 2023年8月17日 |
854 在 数据库接口 中
每月下载 22 次
88KB
2K SLoC
sql_from_models
sql_from_models是基于支持大序列号的Models的分支。Models是一个SQL迁移管理工具。它支持PostgreSQL、MySQL和SQLite。它被设计为作为您的应用程序库使用,但也包括一个CLI工具,可以从Rust代码生成Sql迁移。
快速入门
通过运行以下命令安装CLI
$ cargo install sql_from_models-cli
现在运行以下命令创建一个环境文件,其中设置了DATABASE_URL
变量
$ echo "DATABASE_URL=sqlite://database.db" > .env
或者也可以使用以下命令将其设置为环境变量
$ export DATABASE_URL=sqlite://database.db
现在我们可以通过以下命令创建数据库
$ models database create
此命令将创建一个名为database.db
的SQLite文件。现在您可以在结构体上推导出Model
特质,并且models
将为您管理迁移。例如,在src/main.rs
中写入
#![allow(dead_code)]
use models::Model;
#[derive(Model)]
struct Profile {
#[primary_key]
id: i32,
#[unique]
email: String,
password: String,
is_admin: bool,
}
#[derive(Model)]
struct Post {
#[primary_key]
id: i32,
#[foreign_key(Profile.id)]
author: i32,
#[default("<Untitled Post>")]
title: String,
content: String,
}
#[derive(Model)]
struct PostLike {
#[foreign_key(Profile.id, on_delete="cascade")]
#[primary_key(post_id)]
profile_id: i32,
#[foreign_key(Post.id, on_delete="cascade")]
post_id: i32,
}
#[derive(Model)]
struct CommentLike {
#[foreign_key(Profile.id)]
#[primary_key(comment_id)]
profile_id: i32,
#[foreign_key(Comment.id)]
comment_id: i32,
is_dislike: bool,
}
#[derive(Model)]
struct Comment {
#[primary_key]
id: i32,
#[foreign_key(Profile.id)]
author: i32,
#[foreign_key(Post.id)]
post: i32,
}
fn main() {}
如果您现在运行以下命令,您的迁移应该会自动创建。
$ models generate
输出应该如下所示
Generated: migrations/1632280793452 profile
Generated: migrations/1632280793459 post
Generated: migrations/1632280793465 postlike
Generated: migrations/1632280793471 comment
Generated: migrations/1632280793476 commentlike
您可以在migrations/
文件夹中查看生成的迁移。要执行这些迁移,您可以执行以下命令
models migrate run
输出应该如下所示
Applied 1631716729974/migrate profile (342.208µs)
Applied 1631716729980/migrate post (255.958µs)
Applied 1631716729986/migrate comment (287.792µs)
Applied 1631716729993/migrate postlike (349.834µs)
Applied 1631716729998/migrate commentlike (374.625µs)
如果我们以后修改了应用程序中的这些结构,我们可以生成新的迁移来更新表。
回滚迁移
Models可以使用带有-r
标志的down迁移生成。注意,简单且可逆的迁移不能混合使用
$ models generate -r
要回滚最后执行的迁移,可以运行
$ models migrate revert
如果您以后想查看哪些迁移尚未应用,也可以执行
$ models migrate info
必须先回滚已应用的迁移,才能将其删除。
可用属性
primary_key
它用于标记表的主键。
#[primary_key]
id: i32,
对于具有多列主键的表,使用以下语法
#[primary_key(second_id)]
first_id: i32,
second_id: i32,
这相当于
PRIMARY KEY (first_id, second_id),
foreign_key
它用于标记外键约束。
#[foreign_key(Profile.id)]
profile: i32,
它还可以指定on_delete
和on_update
约束
#[foreign_key(Profile.id, on_delete="cascade")]
profile_id: i32,
这相当于
FOREIGN KEY (profile_id) REFERENCES profile (id) ON DELETE CASCADE,
default
它可以用于设置列的默认值。
#[default(false)] // when using SQLite use 0 or 1
is_admin: bool,
#[default("")]
text: String,
#[default(0)]
number: i32,
unique
它用于标记唯一约束。
#[unique]
email: String,
对于多列唯一约束,使用以下语法
#[unique(post_id)]
profile_id: String,
post_id: i32,
这相当于
UNIQUE (profile_id, post_id),
CLI 快捷方式
CLI 包含以下快捷方式
models 数据库
->models db
models 生成
->models gen
models 迁移
->models mig
依赖
~4–10MB
~222K SLoC