大佬教程收集整理的这篇文章主要介绍了Node.js中的PostgreSQL多行更新,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
下面的示例基于pg-promise库及其方法helpers.update:
// library initialization, usually placed in its own module:
const pgp = require('pg-promise')({
capsql: true // cAPItalize all generated sql
});
const db = pgp(/*your connection details*/);
// records to be updated:
const updateData = [
{ID: 1, value: 1234},
{ID: 2, value: 5678},
{ID: 3, value: 91011}
];
// declare your ColumnSet once, and then reuse it:
const cs = new pgp.helpers.ColumnSet(['?ID', 'value'], {table: 'fit_ratios'});
// generating the update query where it is needed:
const update = pgp.helpers.update(updateData, cs) + ' WHERE v.ID = t.ID';
//=> UPDATE "fit_ratios" AS t SET "value"=v."value"
// FROM (VALUES(1,1234),(2,5678),(3,91011))
// AS v("ID","value") WHERE v.ID = t.ID
// executing the query:
db.none(update)
.then(()=> {
// success;
})
.catch(error=> {
// error;
});
这种生成多行更新的方法可以表征为:
注意,我们?
在列的前面使用ID
以指示该列是条件的一部分,但不进行更新。有关完整的列语法,请参见类Column和ColumnConfig结构。
正如我已经发现的那样,可以通过执行类似的操作在一个查询中更新多行
update test as t set
column_a = c.column_a,column_c = c.column_c
from (values
('123',1,'---'),('345',2,'+++')
) as c(column_b,column_a,column_c)
where c.column_b = t.column_b;
特别感谢@Roman Pekar的明确回答。
现在,我正在尝试将这种更新与查询合并到NodeJS中的postgreSQL数据库中。
这是我的代码片段:
var requestData = [
{id: 1,value: 1234}
{id: 2,value: 5678}
{id: 3,value: 91011}
]
client.connect(function (err) {
if (err) throw err;
client.query(buildStatement(requestData),function (err,result) {
if (err) throw err;
res.json(result.rows);
client.end(function (err) {
if (err) throw err;
});
});
});
var buildStatement = function(requestData) {
var params = [];
var chunks = [];
for(var i = 0; i < requestData.length; i++) {
var row = requestData[i];
var valuesClause = [];
params.push(row.id);
valuesClause.push('$' + params.length);
params.push(row.value);
valuesClause.push('$' + params.length);
chunks.push('(' + valuesClause.join(',') + ')');
}
return {
text: 'UPDATE fit_ratios as f set ratio_budget = c.ratio_budget from (VALUES ' + chunks.join(',') + ') as c(ratio_label,ratio_budget) WHERE c.ratio_label = f.ratio_label',values: params
}
}
我没有收到错误,但是它不会更新我的表,我真的不知道这里出了什么问题。查询代码中可能存在语法错误?我只是在NodeJS
pg包中更新时找不到多行查询的任何特定示例
以上是大佬教程为你收集整理的Node.js中的PostgreSQL多行更新全部内容,希望文章能够帮你解决Node.js中的PostgreSQL多行更新所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。