【问题标题】:ExpressJS + Sequelize er_bad_field_error: Unknown column in fieldlistExpressJS + Sequelize er_bad_field_error:字段列表中的未知列
【发布时间】:2016-02-13 07:31:01
【问题描述】:

将以下模型文件与 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'

为什么我不允许在模型中添加字段以便能够从控制器访问它们?

【问题讨论】:

  • 您是否正在将您的模型与数据库同步? ,确保你正在这样做,关于你的 ZIP 字段没有数据类型 INT ,有 INTEGER ,docs.sequelizejs.com/en/latest/api/datatypes/#integer
  • 模型与数据库的同步发生在插入之后,对吗?另外,我将 ZIP 类型更改为 INTEGER,并且传播了完全相同的错误
  • 你必须同步你的模型模式,这将改变你在数据库中的表,所以如果你可以检查你的表中是否有一个 ZIP 列,那就没问题了。

标签: node.js express database-schema sequelize.js


【解决方案1】:

可能由于旧表中的现有行而使 sequelize/SQL 感到困惑。如果您已经创建了一些表,您是否尝试过删除数据库中的任何现有表?正如已经说过的,同步数据库很重要,但也将“强制”设置为 true,以便您擦除旧表(仅当您的数据库未投入生产时才这样做!)。它在文档中: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);
  });

【讨论】:

    【解决方案2】:

    添加sync({ force: true }) 将重新创建表,同时删除所有条目,如果您有生产中的数据库。您可以尝试使用相同但使用更改选项sync({ alter: true })。它将尝试更新新值或删除旧值而不会造成太大伤害。在投入生产之前,我会先在开发模式下尝试。

    【讨论】:

      猜你喜欢
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2012-11-09
      • 2020-03-29
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多