postgresql 未处理的拒绝 SequelizeDatabaseError:关系“用户”不存在
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/51267470/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Unhandled rejection SequelizeDatabaseError: relation "users" does not exist
提问by Ahmed Ghrib
I am getting started with Sequelize. I am following the documentation they are providing on their website :http://docs.sequelizejs.com/manual/installation/getting-started.html
我正在开始使用 Sequelize。我正在关注他们在其网站上提供的文档:http: //docs.sequelizejs.com/manual/installation/getting-started.html
const Sequelize = require('sequelize');
const sequelize = new Sequelize('haha', 'postgres', 'postgres', {
host: 'localhost',
dialect: 'postgres',
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
// SQLite only
storage: 'path/to/database.sqlite'
});
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.');
})
.catch(err => {
console.error('Unable to connect to the database:', err);
});
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
}
});
// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
// Table created
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
Up until here, everything works perfectly. And the table "user" is correctly built and populated. (Although I do not understand Sequelize appends an "s" automatically to "user", any explanation.)
到这里为止,一切正常。并且“用户”表已正确构建和填充。(虽然我不明白 Sequelize 会自动将“s”附加到“user”,任何解释。)
However when I add the following portion of code:
但是,当我添加以下代码部分时:
User.findAll().then(users => {
console.log(users)
})
I get this error :
我收到此错误:
Unhandled rejection SequelizeDatabaseError: relation "users" does not exist
未处理的拒绝 SequelizeDatabaseError:关系“用户”不存在
So my questions are:
所以我的问题是:
- Why does Sequelize add an "s" to user. (I know it makes sense but shouldn't the developer decide that)
- What is causing that error? I followed the documentation but it still didn't work?
- 为什么 Sequelize 向用户添加“s”。(我知道这是有道理的,但开发人员不应该决定)
- 是什么导致了这个错误?我遵循了文档,但它仍然不起作用?
回答by ccordon
When you are defining your model you can add configurations, in this case the option that you must add is freezeTableName
prevents the names from being plural.
当您定义模型时,您可以添加配置,在这种情况下,您必须添加的选项是freezeTableName
防止名称为复数。
const User = sequelize.define('user', {
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
}
}, {
// disable the modification of table names; By default, sequelize will automatically
// transform all passed model names (first parameter of define) into plural.
// if you don't want that, set the following
freezeTableName: true,
});
回答by JamesSchiiller
Run that code twice.
运行该代码两次。
Before running the second time, comment out the following code,
在第二次运行之前,注释掉以下代码,
// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
// Table created
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});
回答by Sahan Dissanayaka
There is another interesting way you can avoid this. But you need to really focus on this way of implementation.
还有另一种有趣的方法可以避免这种情况。但是您需要真正关注这种实现方式。
const User = sequelize.define("user", {
firstname: {
type: Sequelize.STRING
},
lastname: {
type: Sequelize.STRING
}
});
you intentionally put user
here and use users
in other places of coding(Assume sequelize will automatically transform all passed model names (first parameter of define) into plural) . This way of coding will simplify your code.
你故意放在user
这里并users
在其他地方使用(假设 sequelize 会自动将所有传递的模型名称(定义的第一个参数)转换为复数)。这种编码方式将简化您的代码。