使用 Diesel 的声明式模式定义

Declarative schema definition with Diesel

我想编写 table 模式声明方式

但是,据我所知,Diesel 需要如下手写迁移 DDL。

-- up.sql
CREATE TABLE members (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL
);

-- down.sql
DROP TABLE members;

它有点复杂,因为它是有状态的。

Diesel 提供的一种声明式编写模式的方法吗? 或者是否存在一个好的外部工具?

我发现 Prisma 可以从用自己的语法编写的声明性模式中生成等同于 up.sql 的 DDL。 但是我找不到生成 down.sql 的方法 https://www.prisma.io/docs/concepts/components/prisma-migrate

如果我理解正确的话,你正在寻找一种方法来保持 Rust 实体和数据库模式同步,而不必编写任何 SQL(这基本上是像 EFCore 或 GORM 这样的常规 orm会提供)。

如果这就是您所需要的,恐怕柴油不会满足您的需求。 这个库看起来不错 https://github.com/rust-db/barrel,它为您提供了一种使用 Rust 而不是 SQL 编写迁移的方法,有点像 EFCore。

diesel 还提供了 embed_migrations! 宏,您可以使用它来自动 运行 迁移而无需使用 cli。

然而,尽管所有这些工具都可以帮助您自动执行数据库迁移,但您仍然需要手动编写它们。