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

DDD
Lepaskan: 2024-10-30 06:29:02
asal
366 orang telah melayarinya

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);
Salin selepas log masuk

Kod ini menjana SQL berikut:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!