ExpressJS + Sequelize er_bad_field_error: Unknown column in fieldlist
ExpressJS + Sequelize er_bad_field_error: Unknown column in fieldlist
将以下模型文件与 Sequelize 结合使用,此代码运行无误并允许我执行插入:
var crypto = require('crypto');
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User',
{
title: DataTypes.STRING,
name: DataTypes.STRING,
email: DataTypes.STRING,
username: DataTypes.STRING,
hashedPassword: DataTypes.STRING,
provider: DataTypes.STRING,
salt: DataTypes.STRING,
facebookUserId: DataTypes.INTEGER,
twitterUserId: DataTypes.INTEGER,
twitterKey: DataTypes.STRING,
twitterSecret: DataTypes.STRING,
github: DataTypes.STRING,
openID: DataTypes.STRING
},
...
)
但是,当我尝试手动添加自己感兴趣的字段时,即添加如下邮政编码字段时:
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User',
{
title: DataTypes.STRING,
name: DataTypes.STRING,
email: DataTypes.STRING,
username: DataTypes.STRING,
hashedPassword: DataTypes.STRING,
provider: DataTypes.STRING,
salt: DataTypes.STRING,
facebookUserId: DataTypes.INTEGER,
twitterUserId: DataTypes.INTEGER,
twitterKey: DataTypes.STRING,
twitterSecret: DataTypes.STRING,
github: DataTypes.STRING,
openID: DataTypes.STRING,
ZIP: DataTypes.INT
},
传播以下错误:
SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'title' in 'field list'
为什么不允许我在模型中添加字段以便能够从控制器访问它们?
可能 sequelize/SQL 因旧 table 中的现有行而感到困惑。如果您已经做了一些,您是否尝试过删除数据库中任何现有的 table?正如已经说过的,同步数据库很重要,但还要将 "force" 设置为 true 以便您擦除旧的 tables(仅当您的数据库未投入生产时才执行此操作!)。它在文档中:http://docs.sequelizejs.com/en/1.7.0/articles/getting-started/
对我有用。
sequelize
.sync({ force: true })
.then(function(err) {
console.log('It worked!');
}, function (err) {
console.log('An error occurred while creating the table:', err);
});
添加 sync({ force: true })
将重新创建 table,同时删除所有条目(如果您在生产中拥有数据库)。您可以尝试使用相同但带有更改选项 sync({ alter: true })
的方法。它会尝试更新新值或删除旧值而不会造成太大伤害。在投入生产之前,我会先在开发模式下尝试。
将以下模型文件与 Sequelize 结合使用,此代码运行无误并允许我执行插入:
var crypto = require('crypto');
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User',
{
title: DataTypes.STRING,
name: DataTypes.STRING,
email: DataTypes.STRING,
username: DataTypes.STRING,
hashedPassword: DataTypes.STRING,
provider: DataTypes.STRING,
salt: DataTypes.STRING,
facebookUserId: DataTypes.INTEGER,
twitterUserId: DataTypes.INTEGER,
twitterKey: DataTypes.STRING,
twitterSecret: DataTypes.STRING,
github: DataTypes.STRING,
openID: DataTypes.STRING
},
...
)
但是,当我尝试手动添加自己感兴趣的字段时,即添加如下邮政编码字段时:
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User',
{
title: DataTypes.STRING,
name: DataTypes.STRING,
email: DataTypes.STRING,
username: DataTypes.STRING,
hashedPassword: DataTypes.STRING,
provider: DataTypes.STRING,
salt: DataTypes.STRING,
facebookUserId: DataTypes.INTEGER,
twitterUserId: DataTypes.INTEGER,
twitterKey: DataTypes.STRING,
twitterSecret: DataTypes.STRING,
github: DataTypes.STRING,
openID: DataTypes.STRING,
ZIP: DataTypes.INT
},
传播以下错误:
SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'title' in 'field list'
为什么不允许我在模型中添加字段以便能够从控制器访问它们?
可能 sequelize/SQL 因旧 table 中的现有行而感到困惑。如果您已经做了一些,您是否尝试过删除数据库中任何现有的 table?正如已经说过的,同步数据库很重要,但还要将 "force" 设置为 true 以便您擦除旧的 tables(仅当您的数据库未投入生产时才执行此操作!)。它在文档中:http://docs.sequelizejs.com/en/1.7.0/articles/getting-started/
对我有用。
sequelize
.sync({ force: true })
.then(function(err) {
console.log('It worked!');
}, function (err) {
console.log('An error occurred while creating the table:', err);
});
添加 sync({ force: true })
将重新创建 table,同时删除所有条目(如果您在生产中拥有数据库)。您可以尝试使用相同但带有更改选项 sync({ alter: true })
的方法。它会尝试更新新值或删除旧值而不会造成太大伤害。在投入生产之前,我会先在开发模式下尝试。