我是Sequelize的新手,现在我正在用NodeJS和Sequelize创建一个RESTful api。我正在试图找出如何更改我的数据库架构,如使用Sequelize
更改我的列名称我创建了一个像这样的模型
sequelize model:create --name MyUser --attributes first_name:string,last_name:string,bio:text
它在Models
中创建了一个文件'use strict';
module.exports = function(sequelize, DataTypes) {
var Page = sequelize.define('Page', {
name: DataTypes.STRING,
text: DataTypes.TEXT,
url: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
}
}
});
return Page;
};
和迁移文件夹中的一个文件
'use strict';
module.exports = {
up: function(queryInterface, Sequelize) {
return queryInterface.createTable('Pages', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
type: Sequelize.STRING
},
text: {
type: Sequelize.TEXT
},
url: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: function(queryInterface, Sequelize) {
return queryInterface.dropTable('Pages');
}
};
问题是如果我想添加新列并更改现有列名
示例我想更改为此
'use strict';
module.exports = function(sequelize, DataTypes) {
var Page = sequelize.define('Page', {
fullname: DataTypes.STRING,
text: DataTypes.TEXT,
url: DataTypes.STRING,
email: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
}
}
});
return Page;
};
我已经在Stackoverflow中阅读了一些关于此内容的页面,就像在本页中一样
How to auto generate migrations with Sequelize CLI from Sequelize models?
和
Sequelize.js: how to use migrations and sync
其中一个页面可以使用此链接https://www.youtube.com/watch?v=wHTBxtk8ezo中的Sequelize-cmd自动更改列,但Sequelize-cmd已被弃用,另一种方式,我现在唯一的方法是使用{创建迁移文件{1}}并手动编写代码以使用sequelize migration:create
和addColumn
所以,我现在的问题是有一种方法可以使用renameColumn
创建迁移文件,addColumn
自动像renameColumn
一样自动而不必手动编写它?
答案 0 :(得分:1)
导航到项目目录后,首先在终端中输入sequelize migration:create --name changeColumn
。这将在迁移文件夹中创建一个名为changeColumn的新迁移文件,其中包含创建日期。
然后使用renameColumn方法,该方法接收表名,原始列名和新列名。将文件更新为以下代码后,返回终端并键入sequelize db:migrate
以运行迁移。
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.renameColumn('Users',
'beforeName', 'afterName');
},
down: (queryInterface, Sequelize) => {
return queryInterface.renameColumn('Users', 'afterName', 'beforeName');
}
};
答案 1 :(得分:0)
有一个新的npm软件包,可以通过比较模型文件并为您编写迁移文件来解决此问题
Sequelize-mig
通过以下方式安装:
npm install sequelize-mig -g / yarn global add sequelize-mig
然后像这样使用它
sequelize-mig migration:make -n <migration name>
,它将自动为您生成迁移文件,并从您的模型文件中读取所有更新