Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Memformat Rentetan Python dengan betul untuk Pertanyaan SQL LIKE dengan Kad Liar?

Bagaimanakah Saya Boleh Memformat Rentetan Python dengan betul untuk Pertanyaan SQL LIKE dengan Kad Liar?

Barbara Streisand
Barbara Streisandasal
2024-12-19 21:32:13488semak imbas

How Can I Correctly Format Python Strings for SQL LIKE Queries with Wildcards?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn