Rumah >hujung hadapan web >tutorial js >Bagaimanakah saya boleh melakukan sisipan berbilang baris dengan cekap dengan pg-promise?

Bagaimanakah saya boleh melakukan sisipan berbilang baris dengan cekap dengan pg-promise?

DDD
DDDasal
2024-10-30 06:29:02448semak imbas

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

Sisipan Berbilang Baris dengan pg-promise

Masalah:
Sisipan menggunakan parameter satu objek boleh dilakukan dengan mudah menggunakan pg-promise, tetapi sisipan berbilang baris memerlukan teknik yang lebih kompleks. Adakah terdapat kaedah mudah untuk memasukkan berbilang baris dengan satu pertanyaan?

Penyelesaian:

Dalam versi pg-promise yang lebih baharu, ruang nama pembantu menyediakan kaedah yang dioptimumkan dan fleksibel untuk sisipan berbilang baris. Daripada membina rentetan pertanyaan secara manual, anda boleh menggunakan fungsi sisip dalam ruang nama pembantu:

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);

Kod ini menjana SQL berikut:

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

Pendekatan ini menawarkan beberapa kelebihan:

  • Prestasi yang dioptimumkan
  • Menghalang suntikan SQL
  • Penjanaan pertanyaan terpusat untuk sisipan atau kemas kini satu baris dan berbilang baris

Soalan Sampingan:

Sisipan menggunakan tatatanda parameter dilindungi daripada suntikan SQL apabila nama parameter dipetik dengan betul. Walau bagaimanapun, jika sisipan dinamik nama lajur atau jadual diperlukan, Nama SQL harus digunakan untuk perlindungan tambahan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan sisipan berbilang baris dengan cekap dengan pg-promise?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn