【问题标题】:How to fix "Unhandled rejection SequelizeDatabaseError: relation "ABC" does not exist"?如何修复“未处理的拒绝 SequelizeDatabaseError:关系“ABC”不存在”?
【发布时间】:2019-06-02 01:47:03
【问题描述】:

我正在尝试从现有的 postgres 数据库中获取数据,该数据库中有几个表。虽然成功连接到数据库,但我似乎无法执行任何测试查询,例如

Model.findAll().then(table =>{ console.log(table)}

我尝试将架构名称附加到模型定义中,例如

const Model = sequelize.define('Schema.ABC', { ....}}

引发与标题相同的错误

我也尝试将架构名称附加到查询中,但它会引发语法错误并且代码不会执行

Model.findAll().then('Schema.ABC' => { console.log(Schema.ABC)}

如果表确实需要附加Schema名称,那么我也想知道如何实现它。

下面是我的代码片段

const Model = sequelize.define('ABC',{
    CompanyName: Sequelize.STRING,
    createdAt: Sequelize.DATE,
    updatedAt: Sequelize.DATE
},
{
    // tableName: `"Schema"."ABC"`,
    freezeTableName: true
});

...
Model.removeAttribute('id');

Model.findAll().then(ABC => {
    console.log(ABC)
})

【问题讨论】:

  • 你的表名是什么?
  • 这里的表名是ABC。

标签: node.js postgresql sequelize.js


【解决方案1】:

您应该像这样定义您的架构,不加注释 tableName 属性:

const ABC = sequelize.define('ABC',{
    CompanyName: Sequelize.STRING,
    createdAt: Sequelize.DATE,
    updatedAt: Sequelize.DATE
  },
  {
    freezeTableName: true,
    tableName: 'ABC',
  });

并在异步函数内部使用它:

async function findAllABC() {
  await ABC.findAll().then((result) => {
    console.log(`The result is: '${result}'`);
  });
}

findAllABC();

【讨论】:

  • 使用 await 会引发另一个错误 SyntaxError: await is only valid in async function
  • 你需要将它包装在一个异步函数中,通常你有一个控制器。我更新了我的答案,看看吧。
猜你喜欢
  • 2018-12-18
  • 2016-07-21
  • 2018-10-15
  • 2020-07-08
  • 1970-01-01
  • 2019-09-19
  • 2017-09-20
  • 1970-01-01
  • 2020-06-13
相关资源
最近更新 更多