当前位置: 首页 > 知识库问答 >
问题:

更新多个列和值节点postgres

李奕
2023-03-14

使用< code>node-postgres我想更新我的用户模型中的列,目前我有这个

async function update_user_by_email(value, column, email){
  const sql = format('UPDATE users SET %I = $1,  WHERE email = $2', column);
  await pool.query(sql, [value, email]);
}

所以我可以做到这一点

await  update_user_by_email(value, column_name, email_address);

但是,如果我想更新多个列和值,我目前正在做一些非常低效的事情,并调用该方法x次(即对于每个查询)

await update_user_by_email(value, column_name, email_address);
await update_user_by_email(value_2, column_name_2, email_address);
await update_user_by_email(value_3, column_name_3, email_address);

我如何通过只调用一次数据库来生成这个。

谢谢

共有1个答案

怀飞扬
2023-03-14

这里有几个选项:

> < li>

node-postgres允许您基于准备好的语句创建查询。(这建立在原生pg-sql预备语句的基础上)。

postgres建议使用这些命令填充表,作为使用其copy命令的辅助选项。您最终会执行更多的SQL语句(可能每行一个),但预处理语句的优点应该可以在一定程度上抵消这一点。

您也可以将其与交易相结合,在上面的postgres“填充”链接中也提到过。

另一种选择是另一个名为pg-promise的库(特别是帮助器)所采用的方法。pg-promise 帮助程序库从字面上为大容量插入/更新语句生成 sql 语句(作为字符串)。这样,您就可以使用单个语句一次更新/插入数千行。

通过直接从information_schematables0.05 columnstables中提取结构数据,也可以(而且相对容易)自定义构建自己的sql helper,或者补充pg promise。

pg promise的一个更乏味的事情是必须给它所有的列名(有时还包括定义、默认值等),如果您使用几十个或数百个单独的表,那么直接从数据库本身自动生成此信息可能更简单、更健壮(您不必每次更改数据库时都更新列名数组)

注意:您不需要使用pg promise来提交由其助手库生成的查询。就个人而言,我更喜欢node postgres用于实际的数据库通信,并且通常只使用pg promise helpers库来构建那些批量SQL语句。

注2:值得注意的是,pg-promise编写了自己的SQL注入保护(通过转义值中的单引号和表/列名中的双引号)。在第三个选项中也需要这样做。而准备好的语句则由数据库服务器本身以本机方式防止sql注入。

 类似资料:
  • 我有这个密码 但是,如果要更新节点的值,该怎么办?我试着在箱子里做value=newValue,但似乎不被允许。 我的树/节点的结构:

  • 问题内容: 我创建了一个SQL查询,该查询更新了一个表列,其中另一列=值 代码: 问题出在。如何使其使用这些ID更新列? 问候。 问题答案: 替换为

  • firebase中我的数据库截图 这里我有一个叫做产品的节点。在那里,我有许多子节点。所有这些节点都有一个共同的值叫做产品库存。我需要更新产品内部所有节点的产品库存值。我如何在android Studio(Java)中做到这一点,因为我正在开发一个购物应用程序?需要帮助。 流程是:用户将产品添加到购物车。在购物车里,我有ordernow按钮。因此,当用户现在单击order时,应该从products

  • SyntaxError:无效输入“h”:预期为“I/I”(第10行,第28列(偏移量:346))“merge(p:primaryconsumer),其中p.name=svc.name” 我100%确信这些名称是唯一的,并且将与现有节点集中的唯一使用者名称相匹配(有待观察)。 当唯一节点属性匹配时,如何将现有属性添加到新数据中?(我希望获得唯一的ID,但我必须能够在匹配上执行新数据的更新)

  • 我刚刚开始学习如何使用XML数据格式,并且已经在更新一些数据上陷入了困境。我真的,真的很感谢有人帮我解决这个问题,因为我完全不知道怎么处理这样的问题。 生成一些示例数据的代码: 现在困难的部分来了... 我需要更新“value”节点的值,其中“key”节点的值=“abc”在同一个“parameter”节点中。 正如您所看到的,我的xml中有几个“参数”节点,这些节点没有我可以用来区分它们和确定应该

  • 问题内容: 如何在MySQL中更新多个值? 这不起作用: 问题答案: 您需要在两个不同的值之间添加一个逗号。例如: