【问题标题】:How do I implement sequelize migration down functionality for databases?如何为数据库实现 sequelize 向下迁移功能?
【发布时间】:2014-03-31 19:03:19
【问题描述】:

在 Sequelize.js 中,我创建了一个示例迁移文件:

module.exports = {
  up: function(migration, DataTypes, done) {
    // add altering commands here, calling 'done' when finished
    migration.createTable('Users', {
        id: {
            type: DataTypes.INTEGER, 
            primaryKey: true, 
            autoIncrement: true, 
        }, 
        createdAt: {
          type: DataTypes.DATE
        },
        updatedAt: {
          type: DataTypes.DATE
        },
        firstname: DataTypes.STRING, 
        lastname: DataTypes.STRING,
        email: DataTypes.STRING, 
        password: DataTypes.STRING,
    });
    done()
  },
  down: function(migration, DataTypes, done) {
    // add reverting commands here, calling 'done' when finished
    done()
  }
}

有人能解释一下上下功能的用例和可能的实现吗?

谢谢!

【问题讨论】:

  • 如果您的项目中没有看到案例,请不要使用此功能。保持简短和简单。例如:创建 dbsync 脚本并在更新模型时运行它。
  • 嗨,我不知道可能的用例。 Sequelize Documentation 没有彻底解释这一点。你能给我举个例子吗?谢谢!
  • 你的问题到底是什么?我不太明白......如果你的意思是怎么了up,什么是down: - up:运行sequelize db:migrate时将执行所有命令 - down:运行sequelize db:migrate时将执行所有命令:撤消。 Sequelize 还说​​开发环境是默认的,但我遇到了问题。所以我必须在最后使用 --env development 执行所有命令。

标签: javascript database node.js database-migration sequelize.js


【解决方案1】:

您必须看到,如果您的数据库有 2 个不同的“状态”,即迁移前和迁移后。

在开始任何迁移之前,您没有任何 Users 表,因此假设您的数据库处于“状态 1”。

当您运行向上迁移 (sequelize db:migrate) 时,您会将数据库传递到“状态 2”(现在您的数据库中有 Users 表)。

如果出现任何问题或您对此次迁移改变了主意,您可以通过运行与 up 功能相反的 down 功能 (sequelize db:migrate:undo) 再次返回“状态 1”。

在这种情况下,它很简单,如果您正在创建 Users,则只需将其删除并再次返回“状态 1”即可。

module.exports = {

    up: function(migration, DataTypes, done) {

        // add altering commands here, calling 'done' when finished
        migration.createTable( 'Users', {

            id: {
                type: DataTypes.INTEGER,
                primaryKey: true,
                autoIncrement: true,
            },
            createdAt: {
                type: DataTypes.DATE
            },
            updatedAt: {
                type: DataTypes.DATE
            },
            firstname: DataTypes.STRING,
            lastname: DataTypes.STRING,
            email: DataTypes.STRING,
            password: DataTypes.STRING,

        })
        .nodeify( done );
    },

    down: function(migration, DataTypes, done) {
    // add reverting commands here, calling 'done' when finished

        migration.dropTable('Users')
        .nodeify( done );

    }

};

例如,如果您要删除 Users 表而不是创建它,则只需交换 up 和 down 代码。

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 2023-04-03
    • 1970-01-01
    • 2018-05-28
    • 2019-12-18
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    相关资源
    最近更新 更多