Mic*_*idt 56 mysql orm node.js sequelize.js
我有一套Sequelize模型.我想使用迁移,而不是DB Sync.
根据这篇文章,Sequelize CLI似乎能够做到这一点:"当您使用CLI进行模型生成时,您也将免费获得迁移脚本."
如何使用现有Sequelize模型中的Sequelize CLI自动生成迁移?
Pau*_*est 42
现在是 2020 年,其中许多答案不再适用于 Sequelize v4/v5/v6 生态系统。
一个好的答案是使用sequelize-auto-migrations,但可能不够规范,无法在您的项目中使用。所以这里的颜色有点多……
我的团队使用了一个fork,sequelize-auto-migrations因为原始 repo 还没有合并一些关键的 PR。#56 #57 #58 #59
$ yarn add github:scimonster/sequelize-auto-migrations#a063aa6535a3f580623581bf866cef2d609531ba
Run Code Online (Sandbox Code Playgroud)
编辑 package.json:
"scripts": {
...
"db:makemigrations": "./node_modules/sequelize-auto-migrations/bin/makemigration.js",
...
}
Run Code Online (Sandbox Code Playgroud)
注意:确保您正在使用 git(或某些源代码控制)和数据库备份,以便在出现问题时可以撤消这些更改。
.sync()yarn db:makemigrations --name "mega-migration")。01-mega-migration.js和_current.json生成的。.sync()或手写迁移,则需要通过将其名称插入 SequelizeMeta 表来“伪造”该大型迁移。INSERT INTO SequelizeMeta Values ('01-mega-migration.js').$ yarn db:makemigrations --name whatever02-whatever.js迁移和更改提交到_current.json、 和_current.bak.json。$ yarn sequelize db:migrate。removeColumn和addColumn。这将丢失生产中的数据。您将需要修改要使用的向上和向下操作renameColumn。对于那些对如何使用 感到困惑的人
renameColumn,代码片段看起来像这样。(为 切换“column_name_before”和“column_name_after”rollbackCommands)
{
fn: "renameColumn",
params: [
"table_name",
"column_name_before",
"column_name_after",
{
transaction: transaction
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果您有大量迁移,则向下操作可能无法以一致的顺序完美删除项目。
这个库的维护者不会主动检查它。因此,如果开箱即用它对您不起作用,您将需要找到不同的社区分支或其他解决方案。
Dor*_*man 34
您无法为现有模型创建迁移脚本.
资源:
如果采用经典方式,则必须通过CLI重新创建模型:
sequelize model:create --name MyUser --attributes first_name:string,last_name:string,bio:text
Run Code Online (Sandbox Code Playgroud)
它会生成这些文件:
车型/ 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;
};Run Code Online (Sandbox Code Playgroud)
迁移/ 20150210104840创建-MY-user.js的:
"use strict";
module.exports = {
up: function(migration, DataTypes, done) {
migration.createTable("MyUsers", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
first_name: {
type: DataTypes.STRING
},
last_name: {
type: DataTypes.STRING
},
bio: {
type: DataTypes.TEXT
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE
}
}).done(done);
},
down: function(migration, DataTypes, done) {
migration.dropTable("MyUsers").done(done);
}
};Run Code Online (Sandbox Code Playgroud)
joh*_*_mc 28
如果您不想从头开始重新创建模型,可以使用以下CLI命令手动生成迁移文件:
sequelize migration:generate --name [name_of_your_migration]
这将生成一个空白的框架迁移文件.虽然它不会将模型结构复制到文件中,但我发现它比重新生成所有内容更容易,更清晰.注意:确保从迁移目录的包含目录运行该命令; 否则CLI将为您生成新的迁移目录
Kal*_*ste 20
您现在可以使用npm包sequelize-auto-migrations自动生成迁移文件.https://www.npmjs.com/package/sequelize-auto-migrations
使用sequelize-cli,用你的项目初始化
sequelize init
Run Code Online (Sandbox Code Playgroud)
创建模型并将其放入模型文件夹中.
安装sequelize-auto-migration:
npm install sequelize-auto-migrations
Run Code Online (Sandbox Code Playgroud)
使用创建初始迁移文件
node ./node_modules/sequelize-auto-migrations/bin/makemigration --name <initial_migration_name>
Run Code Online (Sandbox Code Playgroud)
运行迁移:
node ./node_modules/sequelize-auto-migrations/bin/runmigration
Run Code Online (Sandbox Code Playgroud)
您还可以从现有数据库自动生成模型,但这超出了问题的范围.
MRV*_*VMV 12
截至 2020 年 9 月 16 日,这些答案中的大多数都不太一致!尝试这个新的 npm 包
Sequelize-mig
Run Code Online (Sandbox Code Playgroud)
它完成了sequelize-auto-migrations及其分支中最已知的问题,并进行了维护和记录!
它的使用方式与已知的方式类似
安装:
npm install sequelize-mig -g / yarn global add sequelize-mig
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它
sequelize-mig migration:make -n <migration name>
Run Code Online (Sandbox Code Playgroud)
我创建了一个小型的"迁移文件生成器".它使用sequelize db:migrate- 即使使用外键也能创建完美的文件!
你可以在这里找到它:https: //gist.github.com/manuelbieh/ae3b028286db10770c81
我在一个包含12种不同型号的应用程序中进行了测试:
STRING,TEXT,ENUM,INTEGER,BOOLEAN,FLOAT作为DataTypes
外键约束(甚至互惠(用户所属团队,团队属于用户作为所有者))
使用索引name,method以及unique性能
如果您想在迁移的同时创建模型,请使用以下命令:-
sequelize model:create --name regions --attributes name:string,status:boolean --underscored
Run Code Online (Sandbox Code Playgroud)
--underscored用于创建具有下划线的列,例如:-created_at、updated_at 或任何其他具有下划线的列,并支持用户定义的具有下划线的列。
| 归档时间: |
|
| 查看次数: |
74142 次 |
| 最近记录: |