Apabila memproses pertanyaan pangkalan data dalam Python, anda biasanya perlu memasukkan pembolehubah dalam pernyataan pertanyaan. Walau bagaimanapun, pastikan anda melakukannya dengan cara yang menghalang ralat sintaks atau lubang keselamatan.
Pertimbangkan kod Python berikut:
<code class="language-python">cursor.execute("INSERT INTO table VALUES var1, var2, var3")</code>
Dalam kod ini, var1
ialah integer dan var2
dan var3
ialah rentetan. Walau bagaimanapun, masalah berlaku apabila Python cuba memasukkan nama var1
, var2
dan var3
sebagai sebahagian daripada teks pertanyaan itu sendiri, menyebabkan pertanyaan menjadi tidak sah.
Untuk menyelesaikan masalah ini, anda boleh menggunakan mekanisme penggantian pemegang tempat yang disediakan oleh API pangkalan data. Begini cara untuk menulis semula kod anda menggunakan ruang letak:
<code class="language-python">cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))</code>
Dalam kod yang dipertingkatkan ini:
%s
mewakili pemegang tempat untuk diisi dengan nilai. (var1, var2, var3)
ialah tuple yang mengandungi nilai yang hendak disisipkan. Dengan menghantar nilai sebagai tupel, API pangkalan data mengendalikan pelarian dan petikan pembolehubah yang diperlukan, memastikan keserasian dengan pangkalan data dan menghalang potensi risiko keselamatan.
Perhatikan bahawa untuk satu hujah, tuple dengan koma di belakang diperlukan:
<code class="language-python">cursor.execute("INSERT INTO table VALUES (%s)", (var1,))</code>
Selain itu, elakkan menggunakan operator pemformatan rentetan (%) untuk memasukkan pembolehubah kerana ia boleh membawa kepada lubang keselamatan dan API pangkalan data tidak menyokongnya.
Atas ialah kandungan terperinci Bagaimana untuk Memasukkan Pembolehubah dengan Selamat ke dalam Pertanyaan SQL Menggunakan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!