关于mysql:如何在使用Sequelize更改列或添加新列时更新迁移文件

How to update migration files when change column or add new column using Sequelize

我是Sequelize的新手,现在我正在用NodeJS和Sequelize创建一个RESTful api。我试图弄清楚如何更改数据库模式,例如使用Sequelize更改列名

我创建一个这样的模型

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

它在模型中创建了一个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
'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;
};

和迁移文件夹中的一个文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
'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');
  }
};

问题是如何添加新列并更改现有的列名

示例我想更改为此

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'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中阅读了一些关于此的页面,就像这个页面一样

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

Sequelize.js:如何使用迁移和同步

该页面中的一个页面可以在此链接中使用Sequelize-cmd自动更改列的方法https://www.youtube.com/watch?v=wHTBxtk8ezo但Sequelize-cmd已被弃用,另一种方法也是我唯一的方法现在使用sequelize migration:create创建迁移文件,并使用addColumnrenameColumn手动编写代码以重命名和添加列

因此,我现在的问题是有一种方法可以自动创建addColumnrenameColumn迁移文件,而无需手动编写Sequelize-cmd一样吗?


导航到项目目录后,首先在终端中键入sequelize migration:create --name changeColumn。 这样会在迁移文件夹中创建一个名为changeColumn的新迁移文件,并以创建日期为前缀。
然后,使用renameColumn方法,该方法接受表名,原始列名和新列名。 将文件更新为以下代码后,请返回到终端并键入sequelize db:migrate以运行迁移。

1
2
3
4
5
6
7
8
9
10
11
12
'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.renameColumn('Users',
  'beforeName', 'afterName');
 },

  down: (queryInterface, Sequelize) => {
    return queryInterface.renameColumn('Users', 'afterName', 'beforeName');
 }
};