问题描述
我正在尝试使用pg-promise帮助器更新pgsql表中的一行。查询成功执行并返回成功返回码。但是更改未反映在表中。更新查询后我应该发出COMMIT还是一般自动提交?
const condition = pgp.as.format(` WHERE key = '${value}'`,putData);
const table = new pgp.helpers.TableName({ table: 'mytab',schema: 'myschema'});
const query = pgp.helpers.update(putData,[updateCols],table) + condition;
await db.none(query).then(() => {
status = 200;
response['status'] = 'success';
})
.catch(error => {
status = 500;
response['status'] = 'Failed';
response['error'] = error.message;
response['errorCode'] = error.code;
});
解决方法
未更新相应记录的原因是where条件中的输入无效。空格/空传递到WHERE条件。因此,它无需更新即可返回成功。现在,该代码已得到更正,并且可以正常工作。
第二(与问题无关),我在查询格式化程序中使用ES6字符串格式。根据@ vitaly-t的评论,我将其更改如下。
pgp.as.format('WHERE key = $1',[keyValue]);
或
pgp.as.format('WHERE key = ${keyValue}',{keyValue});