Hati-hati dalam menggunakan interpolasi string untuk kueri SQL, karena ini tidak akan lolos dari parameter input dengan benar dan akan membiarkan aplikasi Anda terbuka terhadap kerentanan injeksi SQL. Perbedaannya mungkin tampak sepele, tetapi kenyataannya sangat besar .
Salah (dengan masalah keamanan)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))
Benar (dengan pelolosan)
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
Ini menambah kebingungan bahwa pengubah yang digunakan untuk mengikat parameter dalam pernyataan SQL bervariasi antara implementasi DB API yang berbeda dan bahwa perpustakaan klien mysql menggunakan printf
sintaks gaya alih-alih yang lebih umum diterima '?' marker (digunakan oleh mis. python-sqlite
).