【问题标题】:UPDATE multiple rows from multiple params in nodejs/pg从 nodejs/pg 中的多个参数更新多行
【发布时间】:2016-08-31 03:12:25
【问题描述】:

我使用 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 类似),所以我不必制作“for () { ... }”?

【问题讨论】:

标签: node.js postgresql pg


【解决方案1】:

驱动程序必须以这个最终形式将查询传递给 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 注入的攻击。

【讨论】:

  • 我明白了。有没有一种简单的方法可以将 "[{votes: 5, id: 1}, {votes: 15, id: 1}, {votes: 25, id: 2}]" 转换为正确的数组,因为 UNNEST 似乎没有'不接受对象列表?
  • 似乎我不允许映射数组以返回元组:my_array = my_array.map(function(e) { return tuple(e.votes, e.id); })
猜你喜欢
  • 2016-09-14
  • 2017-02-16
  • 2018-04-15
  • 2017-11-29
  • 2016-09-01
  • 2018-07-29
  • 2021-09-27
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多