首页 文章

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

提问于
浏览
1

我是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已经被弃用了,另一种方式和我现在唯一的方法是使用 sequelize migration:create 创建迁移文件并手动编写代码重命名并使用 addColumnrenameColumn 添加列

所以,我现在的问题是有一种方法创建迁移文件 addColumnrenameColumn 自动像 Sequelize-cmd 做什么而不必手动编写?

1 回答

  • 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');
     }
    };
    

相关问题