使用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中文網其他相關文章!