node.js - 使用对象更新准备好的语句

标签 node.js postgresql pg-promise

我有一个 Object 将列名称映射到值。要更新的列事先未知,在运行时决定。

例如map = {col1: "value1", col2: "value2"}

我想执行一个 UPDATE 查询,将包含这些列的表更新为相应的值。我可以执行以下操作吗?如果没有,是否有一种无需手动构建查询的优雅方法?

db.none('UPDATE mytable SET $1 WHERE id = 99', map)

最佳答案

is there an elegant way of doing it without building the query manually?

是的,通过使用 helpers用于 SQL 生成。

你可以像这样预先声明一个静态对象:

const cs = new pgp.helpers.ColumnSet(['col1', 'col2'], {table: 'mytable'});

然后像这样使用它,通过 helpers.update :

const sql = pgp.helpers.update(data, cs) + /* WHERE clause with the condition */;
// and then execute it:
db.none(sql).then(data => {}).catch(error => {})

此方法适用于单个对象和对象数组,您只需相应地附加更新条件即可。

另请参阅:PostgreSQL multi-row updates in Node.js

What if the column names are not known beforehand?

请参阅:Dynamic named parameters in pg-promise ,并注意正确的答案取决于您打算如何转换此类列的类型。

关于node.js - 使用对象更新准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306155/

相关文章:

javascript - NodeJS 和 pg-promise,捕获 PostgreSQL 异常

node.js - 如何在 Jade 模板中预填充编辑页面(Node + Express + Jade)

python - 使用 python 和 postgres,execute 函数中的变量?

javascript - 从 postgres 数据库中获取 Node js 中的多个 Refcursor(使用 pg-promise)

sql - Postgres LIKE 以列值作为子字符串

postgresql - n_dead_tup 与 postgresql 中的 dead_tuple_count?

node.js - 具有异步/等待的 Node - 如何获取发生错误的特定行?

node.js - pm2优雅重启,提升用户体验,避免问题

node.js - 有没有办法在 node-gyp 命令行上指定编译器标志(例如,预处理器宏定义)?

node.js - 在 Electron 应用中,使用 webpack/electron-builder 打包后,在 worker_threads 提示 MODULE_NOT_FOUND 中需要第三方模块