Sequelize 迁移
鉴于我的基本待办事项项目元数据表的以下续集模型,我想使用续集的迁移进行一些更改。
module.exports = (sequelize, Sequelize) => {
const Metadata = sequelize.define("metadata", {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
urgencyId: {
type: Sequelize.INTEGER,
allowNull: true
},
dataId: {
type: Sequelize.INTEGER,
allowNull: true
},
taskTypeId: {
type: Sequelize.INTEGER,
allowNull: true
},
projectId: {
type: Sequelize.INTEGER,
allowNull: true
},
data_id: {
type: Sequelize.INTEGER,
allowNull: true
},
});
Metadata.associate = function (models) {
Metadata.belongsTo(models.data,{
foreignKey: {
name: 'data_id',
allowNull: false,
hooks: true
},
onDelete: 'cascade'
});
};
return Metadata;
};Sequelize 使用的迁移文件本质上类似于数据库提交。要在命令行中创建迁移文件类型:
npx sequelize-cli migration:generate --name data-columns-rename
这将在 /migrations 文件夹中创建一个带有模板的迁移文件,其名称为您在上面的命令中提供的名称(在本例中为 data-columns-rename.js,前面是当前日期/时间)。
为您创建的模板迁移文件:
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
/**
* Add altering commands here.
*
* Example:
* await queryInterface.createTable('users', { id: Sequelize.INTEGER });
*/
},
async down (queryInterface, Sequelize) {
/**
* Add reverting commands here.
*
* Example:
* await queryInterface.dropTable('users');
*/
}
};**async up** 命令是它运行以尝试更改表的命令,而 **async down** 命令是运行以删除更改的命令。执行迁移时,请确保 down 命令是反向的。
就我而言,我正在尝试对一些基本的待办事项类型表信息进行一些列名更改,因此我填写的迁移表如下所示:
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
await queryInterface.removeColumn('metadata','dataId')
// renameColumn: table, old column name , new column name
await queryInterface.renameColumn('metadata','urgencyId','urgency_id')
await queryInterface.renameColumn('metadata','taskTypeId','task_type_id')
await queryInterface.renameColumn('metadata','projectId','project_id')
},
async down (queryInterface, Sequelize) {
await queryInterface.addColumn('metadata','dataId', {
type: Sequelize.INTEGER,
allowNull: false
})
await queryInterface.renameColumn('metadata','urgency_id','urgencyId')
await queryInterface.renameColumn('metadata','task_type_id','taskTypeId')
await queryInterface.renameColumn('metadata','project_id','projectId')
}
};(这些变化只是因为我还不习惯 postgres 所希望的蛇形大小写)
迁移表准备好后,使用此命令运行它
npx sequelize-cli db:migrate
在运行该命令的其他打印输出中,我认为成功的关键文本是:
== 20241224113716-metadata-columns-rename: migrating ======= == 20241224113716-metadata-columns-rename: migrated (0.065s)
您可以在 DBeaver 的此屏幕截图中看到已验证的更改:

如果您对介绍 sequelize 入门基础知识的文章感兴趣,请告诉我。