如何使用Sequelize更改列或添加新列时更新迁移文件

时间:2015-09-21 12:52:26

标签: mysql node.js sequelize.js

我是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:createaddColumn

重命名和添加列

所以,我现在的问题是有一种方法可以使用renameColumn创建迁移文件,addColumn自动像renameColumn一样自动而不必手动编写它?

2 个答案:

答案 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>

,它将自动为您生成迁移文件,并从您的模型文件中读取所有更新