当前位置: 首页 > 知识库问答 >
问题:

如何使用续集模型的 Sequelize CLI 自动生成迁移?

杨赞
2023-03-14

我有一套序列模型。我想使用迁移,而不是数据库同步

根据这篇文章,Sequelize CLI似乎能够做到这一点:“当您使用CLI生成模型时,您还可以免费获得迁移脚本。”

如何使用Sequelize CLI从现有的Sequelize模型中自动生成迁移?

共有3个答案

呼延才
2023-03-14

现在是 2020 年,其中许多答案不再适用于 Sequelize v4/v5/v6 生态系统。

一个很好的答案是使用< code > sequel ize-auto-migrations ,但是在您的项目中使用可能不够规范。这里有更多的颜色...

我的团队使用的分叉来延续自动迁移,因为原始的repo还没有合并几个关键的PR#56 #57 #58 #59

$ yarn add github:scimonster/sequelize-auto-migrations#a063aa6535a3f580623581bf866cef2d609531ba

编辑包.json:

"scripts": {
  ...
  "db:makemigrations": "./node_modules/sequelize-auto-migrations/bin/makemigration.js",
  ...
}

注意:请确保使用的是 git(或某些源代码管理)和数据库备份,以便在出现问题时可以撤消这些更改。

  1. 删除所有旧迁移(如果存在)。
  2. 关闭.sync()
  3. 创建一个迁移当前模型中所有内容的大型迁移(yarn-db:makemigrations-name“mega migration”)。
  4. 提交您的<code>01 mega migration.js</code>和生成的<code>_current.json</code>。</li>
  5. 如果您以前运行过.sync()或手工编写的迁移,则需要通过将其名称插入SequelizeMeta表来“伪造”该大型迁移插入SequelizeMeta值('01-mega-migration.js')
  6. 现在您应该可以正常使用了…
  7. 对模型进行更改(添加/删除列,更改约束)
  8. 运行$yarn db:makemigrations--命名任何
  9. 提交02 whather.js迁移以及对_current.json
  10. 的更改
  11. 通过正常的续集cli:$yarn续集db:migrate运行迁移。
  12. 必要时重复7-10
  1. 重命名列将变成一对removeColumnaddColumn。这将丢失生产中的数据。您需要修改向上和向下操作以使用renameColumn

对于那些对如何使用renameColumn感到困惑的人来说,代码片段如下所示。(切换回滚命令的“column_name_before”和“column _name_after”

{
    fn: "renameColumn",
    params: [
        "table_name",
        "column_name_before",
        "column_name_after",
        {
            transaction: transaction
        }
    ]
}

如果您有许多迁移,down操作可能无法以顺序一致的方式完美地删除项目。

该库的维护者不会主动检查它。因此,如果它开箱即用,您将需要找到不同的社区分叉或其他解决方案。

子车雅珺
2023-03-14

无法为现有模型创建迁移脚本。

资源:

  • 迁移教程视频。

如果采用传统方式,您必须通过CLI重新创建模型:

sequelize model:create --name MyUser --attributes first_name:string,last_name:string,bio:text

它将生成以下文件:

型号/myuser.js:

"use strict";
module.exports = function(sequelize, DataTypes) {
  var MyUser = sequelize.define("MyUser", {
    first_name: DataTypes.STRING,
    last_name: DataTypes.STRING,
    bio: DataTypes.TEXT
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
      }
    }
  });
  return MyUser;
};
商鸿哲
2023-03-14

如果不想从头创建模型,可以使用以下CLI命令手动生成迁移文件:

继续迁移:生成--name[name_of_your_migration]

这将生成一个空白框架迁移文件。虽然它不会将您的模型结构复制到文件中,但我确实发现它比重新生成所有内容更容易、更干净。注意:确保从迁移目录的包含目录运行命令;否则,CLI 将为您生成新的迁移目录

 类似资料:
  • 我正在使用MySQL构建一个新的NodeJS应用程序。我需要使用现有的数据库架构。我有一个加载到数据库中的 mysql 转储文件(在 docker 容器中)。我正在尝试自动生成模型和迁移,然后成功运行迁移。我能够生成模型和迁移,但是在运行生成的迁移时存在SQL语法错误。 以下是相关版本: 节点10阿尔卑斯山 我使用续集自动模块自动生成模型。这行得通。 然后,我尝试使用sequelize-auto-

  • 问题内容: 我正在使用Alembic处理Flask的迁移。理论上,应该基于数据库中的更改自动生成迁移。但是,Alembic仅使用上述命令即可生成空白迁移。 有一个与此问题非常相似的问题,即问题是没有导入正确的模型。但是,我已经从我的Flask应用程序导入了模型,如下所示: 以及中导入的数据库元数据env.py(“ start”是我的Flask应用程序主文件的名称): 运行,alembic revi

  • 问题内容: 嗨,我编写了这样的代码 但是我从DAO手动设置了它,例如“ e.setUserID(01);”。否则将不插入行是否有任何过程来获取ID值并检索自动生成的值。我想我会得到一些帮助 问题答案: 采用

  • 我有2个文件,一个ecore实现元模型和一个电子存储库。电子存储库以EMF格式与ecore实现元模型一起提供。我想浏览这个存储库的内容,我所知道的是我必须从实现元模型生成一个Eclipse插件,通过这个插件,我可以打开存储库并浏览它的内容。但我不知道如何生成插件并继续它。 ecore实现元模型是使用Eclipse Indigo SR2中的EMF版本2.7开发的,e-Repository是在相同的环

  • 如何使jooq自动生成器使用liquibase脚本运行,然后在Spring启动时迁移liquibase,而不是mvn干净编译? 我希望 jooq 自动生成器在 liquibase 模式上运行,然后我希望 liquibase 迁移在 spring 启动启动时运行,但目前它在运行 mvn 干净编译时运行。我希望像“获取的更改锁”这样的日志在应用程序启动后出现,而不是在 mvn 干净编译时出现。 这是p

  • 本文向大家介绍如何使用mybatis-generator自动生成代码,包括了如何使用mybatis-generator自动生成代码的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何使用mybatis-generator自动生成代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、在pom文件中添加mybatis-generator