我使用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类似),所以我不必为(){...}"做一个"?
答案 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>