【问题标题】:sequelizer migration script throwing errorUnhandled rejection SequelizeBaseError: SQLITE_ERROR: no such tablesequelizer 迁移脚本抛出错误未处理的拒绝 SequelizeBaseError: SQLITE_ERROR: no such table
【发布时间】:2023-03-17 19:50:01
【问题描述】:

我已经编写了 sequelizer migration javascript 来更改表中的现有列,但是当我运行命令 sequelizer db:migrate ,它给出了错误

== 20170212050240-alter_col_tag_subject: migrating ======= Unhandled rejection SequelizeBaseError: SQLITE_ERROR: no such table: subject_tags == 20170212050240-alter_col_tag_subject: migrated (0.241s)

这是迁移文件的代码

'use strict';

module.exports = {
    up: function (queryInterface, Sequelize) {
        return [
                queryInterface.changeColumn(
                  'subject_tags',
                  'tag',
                    {
                       type: Sequelize.STRING,
                       unique: true,
                        validate: {
                            len: [1, 250]
                        }
                    }
                ),
                queryInterface.changeColumn(
                  'subject_tags',
                  'tag_description',
                    {
                        type: Sequelize.STRING,
                        allowNull: false,
                        validate: {
                            len: [1, 250]
                        }
                    }
                ),
                queryInterface.changeColumn(
                  'subject_tags',
                  'associated_subject',
                    {
                        type: Sequelize.STRING,
                        allowNull: false,
                        validate: {
                            len: [1, 250]
                        }
                    }
                )
        ];
  },

  down: function (queryInterface, Sequelize) {

  }
};

有人知道我为什么会遇到这个问题吗?

【问题讨论】:

  • 必须尝试手动查询来检查表是否真的存在
  • @KevalGohil : 表存在于数据库文件的 sqlite 表中。

标签: node.js orm sqlite sequelize.js


【解决方案1】:

经过大量的谷歌搜索,我在 github discussion 找到了答案

引用 sdepold

大家好。迁移函数应该返回承诺。所以 如果您想在迁移中执行多项操作,只需返回一个 像这样被锁住的承诺:

return queryInterface.removeColumn('users', 'email').then(function () {
  return queryInterface.removeColumn('users', 'encryptedPassword');
});

因此代码正确

module.exports = {
    up: function (queryInterface, Sequelize) {
        return queryInterface.changeColumn(
                  'subject_tags',
                  'tag',
                    {
                       type: Sequelize.STRING,
                       unique: true,
                        validate: {
                            len: [1, 250]
                        }
                    }
                ). then( function () {

                   return queryInterface.changeColumn(
                    #.......
                    );
                }).then( function () {
                    return queryInterface.changeColumn(
                    #.......
                    );
                }) ;

希望这能回答问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-08
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多