Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memformat Rentetan Python dengan betul untuk Pertanyaan SQL LIKE dengan Kad Liar?
Pemformatan Rentetan Python dengan Kad Liar SQL dan SUKA
Menghadapi kesukaran semasa menyepadukan pernyataan SQL dengan kad bebas ke dalam kod Python anda? Artikel ini akan memberikan penyelesaian kepada cabaran biasa yang dihadapi semasa memformat rentetan Python untuk pertanyaan yang melibatkan kata kunci LIKE dan kad bebas.
Masalah:
Menggunakan kata kunci LIKE dengan kad bebas. dalam pernyataan SQL menggunakan MySQLdb dalam Python terbukti bermasalah. Pelbagai percubaan untuk memformat rentetan menggunakan kaedah format Python mengakibatkan ralat sama ada daripada pengesahan nilai Python atau pelaksanaan pertanyaan MySQLdb.
Percubaan Salah:
# Attempt 1: Value error due to unsupported escape sequence "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username LIKE '%%s%'" % (query) # Attempt 2: Returns same error as Attempt 1 "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username LIKE '\%%s\%'" % (query) # Attempt 3: Error from MySQLdb due to insufficient arguments in format string like = "LIKE '%" + str(query) + "%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username " + like # Attempt 4: Returns same error as Attempt 3 like = "LIKE '\%" + str(query) + "\%'" totalq = "SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN\ tag ON user.id = tag.userId WHERE user.username " + like
Penyelesaian:
Untuk menangani isu pemformatan ini dan memastikan Pernyataan SQL dilaksanakan dengan betul, gunakan pendekatan berikut:
curs.execute("""SELECT tag.userId, count(user.id) as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE %s""", ('%' + query + '%',))
Dalam contoh ini, dua argumen dihantar kepada kaedah execute(). Argumen pertama ialah rentetan SQL berformat dengan pemegang tempat untuk ungkapan kad bebas. Argumen kedua ialah tuple yang mengandungi ungkapan kad bebas yang diawali dan diakhiri dengan tanda peratus. Ini memastikan bahawa kad bebas digunakan pada kedua-dua hujung rentetan carian.
Dengan menggunakan kaedah ini, anda menghapuskan risiko serangan suntikan SQL dan memastikan bahawa pertanyaan dilaksanakan tanpa sebarang ralat pemformatan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memformat Rentetan Python dengan betul untuk Pertanyaan SQL LIKE dengan Kad Liar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!