【问题标题】:Declarative schema definition with DieselDiesel 的声明性模式定义
【发布时间】:2021-08-07 15:58:16
【问题描述】:

我想以声明式的方式编写表模式

但是,据我所知,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

【问题讨论】:

    标签: mysql rust rdbms ddl rust-diesel


    【解决方案1】:

    如果我理解正确,您正在寻找一种方法来保持 rust 实体和 db 架构同步,而无需编写任何 SQL(这基本上是 EFCore 或 GORM 等常规 orm 所提供的)。

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

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

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

    【讨论】:

    • 谢谢你,我想你理解正确(对不起我的英语不好)。更多细节,我不想写的不是SQL。我不想写“如何迁移表”。但我可以写“什么是最新架构”。桶是很高兴知道,但它似乎不能解决问题。我还是要按照你写的手动写“如何迁移”。
    • 是的,不幸的是,在 Rust 中无法实现您所说的。我经营一家初创公司,整个代码库都是用 Rust 编写的,我们也在寻找一些工具来自动迁移,但不幸的是我们找不到。
    • 我们正在决定自己编写工具是否值得,如果我们最终这样做,我一定会及时通知您。
    • 我期待听到这个工具。
    猜你喜欢
    • 2019-11-13
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多