Node.js+Sequelize查询报错:未知列'id',模型路由均未定义
解决Sequelize中"Unknown column 'id' in 'field list'"错误(未使用id作为主键时)
这个问题我之前也碰到过——Sequelize有个默认的“潜规则”:它会自动假设你的数据库表有一个名为id的列作为主键,哪怕你根本没在模型里定义这个字段。当你调用findAll()这类查询方法时,它会悄悄把id加到查询的字段列表里,这就是为什么你明明没用到id却还是触发了这个错误。
解决方案:明确指定你的主键字段
只需要在你的ProspectType模型中,给ProspectTypeID字段加上primaryKey: true的配置,告诉Sequelize这才是表的主键,它就不会再去寻找默认的id列了。另外如果你的表没有createdAt和updatedAt这两个默认时间戳字段,最好也加上timestamps: false来避免额外的查询错误。
修改后的模型代码如下:
module.exports = function(sequelize, DataTypes) { return sequelize.define('ProspectType', { ProspectTypeID: { type: DataTypes.INTEGER(11), allowNull: false, primaryKey: true // 明确指定该字段为主键 // 如果ProspectTypeID是自增字段,可以额外加上 autoIncrement: true }, ProspectTypeName: { type: DataTypes.STRING(50), allowNull: true } }, { tableName: 'ProspectType', timestamps: false // 关闭默认时间戳查询(如果表中没有对应字段的话) }); };
验证修改
重启你的Node.js服务,再次访问/prospectType路由,这时候Sequelize会生成正确的查询语句,只包含你模型中定义的ProspectTypeID和ProspectTypeName字段,不会再出现id列的错误了。
内容的提问来源于stack exchange,提问作者Venkatesh
相关产品推荐
相关产品推荐

