Materi
Distributor bahan pangan di Makassar, Surabaya, dan Jakarta memakai aplikasi gudang buatan sendiri. Halaman laporan stoknya punya kotak pencarian, pilihan gudang yang bisa dicentang lebih dari satu, dan pilihan urut. Halaman impornya mencatat mutasi barang dan memperbarui harga dari berkas unggahan. Semua query di kedua halaman itu dirakit dengan f-string, dan tim ingin memperbaikinya tanpa mengubah tampilan.
Untuk setiap bagian query, tentukan dulu jenisnya. Nilai, termasuk pola LIKE dan isi daftar IN, dikirim lewat parameter. Bagian struktur, yaitu nama kolom dan arah urut, dipilih dari kamus allowlist. Pola LIKE di-escape supaya % dan _ dibaca apa adanya. Perubahan banyak baris memakai executemany dengan placeholder bernama, sehingga kamus dari berkas bisa dikirim langsung.
# Kerangka yang sama di tabel lain: daftar karyawan per cabang
tanda = ", ".join("?" * len(cabang))
sql = f"SELECT nama FROM karyawan WHERE cabang IN ({tanda}) ORDER BY {URUT[urut]}, id"
conn.execute(sql, list(cabang))