mysql - 使用 Diesel 的声明式架构定义

标签 mysql rust rdbms ddl rust-diesel

我想以声明方式编写表模式,例如

  • GORM 自动迁移 https://gorm.io/ko_KR/docs/migration.html
  • Django 迁移 https://docs.djangoproject.com/en/3.2/topics/migrations/

  • 但是,据我所知,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。
    柴油还提供 embed_migrations!宏,您可以使用它来在不使用 cli 的情况下自动运行迁移。
    然而,虽然所有这些工具都可以帮助您自动化数据库迁移,但您仍然必须手动编写它们。

    关于mysql - 使用 Diesel 的声明式架构定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67585782/

    相关文章:

    mysql - 如何处理具有大量读写操作的十亿行表

    SQL Server 插入示例

    mysql - 优化和加速 MySQL 查询选择

    module - 在 Rust 中,mod.rs 文件的用途是什么?

    php - 警告 : mysql_fetch_assoc():

    java - 使用Mysql从数据库中检索时间戳数据

    php - 插入到两个表中,一个具有另一个的外键

    mysql - HAVING 和 BETWEEN 查询返回空值

    rust - 使用 nom 匹配模板过滤器表达式

    python - 编写等同于返回其输入对象的 Python 函数的 pyo3 函数