Laksanakan pertanyaan SQL berparameter daripada pembolehubah dalam Python
Untuk mengelakkan suntikan SQL, apabila melaksanakan pertanyaan SQL berparameter dalam Python, biasanya disyorkan untuk menggunakan format berikut:
<code class="language-python">cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", var1, var2, var3)</code>
Walau bagaimanapun, adalah wajar untuk meneroka soalan sama ada adalah mungkin untuk menyimpan pertanyaan dalam pembolehubah dan melaksanakannya kemudian.
execute()
Tandatangan kaedah
Untuk memahami sebab ini mungkin tidak berfungsi, kita perlu menyemak tandatangan kaedah execute()
:
<code class="language-python">cursor.execute(self, query, args=None)</code>
Kaedah ini memerlukan sehingga tiga parameter: pertanyaan dan jujukan parameter atau peta pilihan.
Cuba laksanakan pertanyaan daripada pembolehubah
Jika kita cuba melaksanakan pertanyaan yang disimpan dalam pembolehubah sql
, contohnya:
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql)</code>
Kami akan mendapat ralat kerana sql
mengandungi empat parameter, termasuk pembolehubah itu sendiri.
Asingkan pertanyaan dan parameter
Untuk melaksanakan pertanyaan daripada pembolehubah, kita boleh memisahkan pertanyaan dan parameter:
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" args = var1, var2, var3 cursor.execute(sql, args)</code>
Dalam kes ini, sql
mengandungi pertanyaan dan args
mengandungi parameter. Dengan menyatakan execute(sql, args)
, kami boleh berjaya melaksanakan pertanyaan berparameter.
Cara lain
Sebagai alternatif, kita boleh menggunakan pendekatan dua pembolehubah yang lebih intuitif:
<code class="language-python">sql = "INSERT INTO table VALUES (%s, %s, %s)" cursor.execute(sql, (var1, var2, var3))</code>
Pendekatan ini menghapuskan keperluan untuk mencipta pembolehubah berasingan untuk pertanyaan dan parameter.
Atas ialah kandungan terperinci Bolehkah saya Melaksanakan Pertanyaan SQL Parameter yang Disimpan dalam Pembolehubah dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!