首页  >  文章  >  web前端  >  如何使用 pg-promise 高效地执行多行插入?

如何使用 pg-promise 高效地执行多行插入?

DDD
DDD原创
2024-10-30 06:29:02366浏览

How can I perform multi-row inserts efficiently with pg-promise?

使用 pg-promise 进行多行插入

问题:
使用单个对象的参数进行插入使用 pg-promise 可以轻松执行,但多行插入需要更复杂的技术。有没有简单的方法可以通过单个查询插入多行?

解决方案:

在较新版本的 pg-promise 中,helpers 命名空间提供了优化且灵活的方法用于多行插入。您可以在 helpers 命名空间中使用插入函数,而不是手动构建查询字符串:

const pgp = require('pg-promise')({
    capSQL: true // capitalize all SQL
});
const db = pgp(/*connection*/);
const {ColumnSet, insert} = pgp.helpers;

const cs = new ColumnSet(['col_a', 'col_b'], {table: 'tmp'});
const values = [{col_a: 'a1', col_b: 'b1'}, {col_a: 'a2', col_b: 'b2'}];
const query = insert(values, cs);

await db.none(query);

此代码生成以下 SQL:

<code class="sql">INSERT INTO "tmp"("col_a","col_b") VALUES('a1', 'b1'),('a2', 'b2')</code>

此方法具有多种优点:

  • 优化性能
  • 防止 SQL 注入
  • 针对单行和多行插入或更新的集中查询生成

附带问题:

当正确引用参数名称时,使用参数表示法的插入可以防止 SQL 注入。但是,如果需要动态插入列名或表名,则应使用 SQL 名称进行额外保护。

以上是如何使用 pg-promise 高效地执行多行插入?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn