更新nodejs / pg中多个参数的多行

时间:2016-05-05 10:55:30

标签: node.js postgresql pg

我使用NodeJS和pg以及PostgreSQL数据库作为后端。 使用Client.query运行单个查询可以正常工作。

但是,我遇到了一个挑战,我可以用简单而优雅的方式解决这个问题。

我想跑:

UPDATE portfolios SET votes = $1 WHERE id = $2

来自数组/列表:

[{votes: 5, id: 1}, {votes: 15, id: 1}, {votes: 25, id: 2}]

可以在单个Client.query中完成(或者与pg类似),所以我不必为(){...}"做一个"?

1 个答案:

答案 0 :(得分:2)

驱动程序必须以最终形式将查询传递给Postgresql:

update portfolios p
set votes = s.votes
from unnest(array[(5, 1), (15, 1), (25, 2)]) s (votes int, id int)
where p.id = s.id

所以将此查询传递给驱动程序:

update portfolios p
set votes = s.votes
from unnest($1) s (votes int, id int)
where p.id = s.id

使用适当的数组作为参数。

请注意,如果你自己创建字符串而不是让驱动程序执行它,那么你将容易受到SQL注入的攻击。<​​/ p>