Pengembangan Skrip / Konstruksi SQL DFF.SQL
DFF.SQL(...) digunakan untuk membuat SQL berparameter, sehingga menghindari penyisipan input pengguna melalui penggabungan string. Sebagian besar Konektor SQL sudah memiliki kemampuan ini secara bawaan, sehingga Anda dapat langsung memanggil conn.query(sql, sql_params=...) atau conn.non_query(...).
Hanya jika perlu memformat SQL secara eksplisit untuk debugging, atau pemanggil harus menerima string SQL final, barulah DFF.SQL(...) perlu dipanggil secara terpisah.
Parameter dan Placeholder
| Parameter | Tipe | Wajib / Nilai Default | Keterangan |
|---|---|---|---|
sql |
str | Wajib | Pernyataan SQL yang berisi placeholder parameter |
sql_params |
list | None |
Parameter SQL yang diberikan sesuai urutan placeholder |
| Placeholder | Arti | Contoh Hasil |
|---|---|---|
? |
Parameter nilai, akan di-escape dan diberi tanda kutip | 'user-001' |
?? |
Pengenal atau fragmen SQL, tanpa tanda kutip | users |
| Contoh | |
|---|---|
1 2 3 4 5 | |
?? tidak melindungi input yang tidak tepercaya
Input pengguna harus dimasukkan ke dalam ?. Pengenal seperti nama tabel dan nama kolom hanya boleh dimasukkan ke ?? jika berasal dari daftar yang diizinkan atau konfigurasi tepercaya, dan dilarang menyisipkan nilai SQL melalui f-string atau penggabungan string.
Ekspansi Parameter
Parameter array akan otomatis diperluas menjadi beberapa nilai, dan array dua dimensi akan diperluas menjadi beberapa baris nilai:
| Ekspansi Array | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 | |
Parameter kamus akan diperluas menjadi beberapa ekspresi penugasan:
| Ekspansi Kamus | |
|---|---|
1 2 3 4 5 | |
Sebelum menjalankan SQL tulis atau hapus dinamis, pastikan kembali tabel target dan kondisi filter.