Node.js中使用Sequelize操作MySQL时如何排除ID字段保存数据?
解决Sequelize保存时"Unknown column 'id' in 'field list'"错误
这个问题很常见——Sequelize默认会自动为模型添加一个id字段作为主键,但你的数据表并没有这个字段,所以执行保存操作时,ORM会尝试插入id字段,导致数据库报错。下面是两种针对性的解决办法:
方法一:指定数据表的实际主键(推荐)
如果你的user表有自己的主键(比如你代码里的userid),直接在模型定义中把该字段标记为主键,同时关闭Sequelize自动生成id的行为:
const User = sequelize.define('user', { userid: { type: Sequelize.STRING, primaryKey: true, // 标记userid为主键 allowNull: false // 主键字段通常不允许为空 }, emailid: { type: Sequelize.STRING }, user_type: { type: Sequelize.STRING } }, { timestamps: false, // 如果你的表没有createdAt/updatedAt字段,必须加上这个 freezeTableName: true, // 防止Sequelize自动将表名转为复数(比如把user变成users) underscored: true // 可选:如果你的字段都是下划线命名,开启后模型会自动映射,不用手动处理大小写 });
方法二:完全关闭自动生成主键(不推荐,除非表无主键)
如果你的表确实没有主键(不建议生产环境这么做),可以在模型配置中直接禁用自动生成id字段:
const User = sequelize.define('user', { userid: { type: Sequelize.STRING }, emailid: { type: Sequelize.STRING }, user_type: { type: Sequelize.STRING } }, { timestamps: false, id: false, // 关闭自动生成id字段 freezeTableName: true });
配置完成后,你原来的保存代码就可以正常执行了——Sequelize会严格按照你定义的模型字段来生成SQL语句,不会再尝试插入id字段。
内容的提问来源于stack exchange,提问作者Dharmarajan
相关产品推荐
相关产品推荐

