我正在编写我的服务,使用PostGres的sequelize更新一行。当我使用PSequel试用我的查询时,它可以正常工作:
UPDATE "test_table" SET "test_col"=NULL WHERE "id"= '2'
但是使用sequelize会引发500错误:
db.TestTable.update({ testCol: NULL }, { where: { id: id } })
.then((count) => {
if (count) {
return count;
}
});
我的模型确实允许使用null,我相信它允许空值为默认值以及设置:
testCol: {
type: DataTypes.INTEGER,
allowNull: true,
defaultValue: null,
field: 'test_col'
},
任何其他值,但NULL按预期工作。设置空值有不同的方法吗?
答案 0 :(得分:10)
从它的外观来看,我认为你的问题是你使用SQL的语法来表示空值(' NULL'),你应该使用JS语法('空'。)
db.TestTable.update({ testCol: null }, { where: { id: id } })
.then((count) => {
if (count) {
return count;
}
});
应该有用。
答案 1 :(得分:0)
您是否在日志中检查了更详细的错误消息?我建议您添加一个承诺捕获错误,然后更新您的问题。
目前,我的猜测是您创建了与omitNull: true
的连接。仅使用一个null属性调用更新函数可能是错误500的原因,因为它会生成不完整的UPDATE
命令(没有SET
)。
尝试设置omitNull: false
,或者,如果您无法执行此测试,请尝试以此方式更新:
db.TestTable.testCol = null;
db.TestTable.save(['testCol']);
更多信息here。