使用 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 名称进行额外保护。
以上是如何使用 pg-promise 高效地执行多行插入?的详细内容。更多信息请关注PHP中文网其他相关文章!