Heim >Datenbank >MySQL-Tutorial >Wie kann ich Python-Strings für SQL-LIKE-Abfragen mit Platzhaltern richtig formatieren?

Wie kann ich Python-Strings für SQL-LIKE-Abfragen mit Platzhaltern richtig formatieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-19 21:32:13531Durchsuche

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

Pythons String-Formatierung mit SQL-Wildcards und LIKE

Sind Sie auf Schwierigkeiten bei der Integration von SQL-Anweisungen mit Wildcards in Ihren Python-Code gestoßen? Dieser Artikel bietet eine Lösung für die häufigsten Herausforderungen beim Formatieren von Python-Strings für Abfragen mit dem Schlüsselwort LIKE und Platzhaltern.

Problem:

Verwendung des Schlüsselworts LIKE mit Platzhaltern in einer SQL-Anweisung mit MySQLdb in Python erweist sich als problematisch. Verschiedene Versuche, die Zeichenfolge mit der Formatierungsmethode von Python zu formatieren, führen zu Fehlern entweder bei der Wertvalidierung von Python oder bei der Abfrageausführung von MySQLdb.

Falsche Versuche:

# 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

Lösung:

Um diese Formatierungsprobleme zu beheben und sicherzustellen, dass die SQL-Anweisung ausgeführt wird Verwenden Sie für die korrekte Ausführung den folgenden Ansatz:

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 + '%',))

In diesem Beispiel werden zwei Argumente an die Methodeexecute() übergeben. Das erste Argument ist eine formatierte SQL-Zeichenfolge mit einem Platzhalter für den Platzhalterausdruck. Das zweite Argument ist ein Tupel, das den Platzhalterausdruck enthält, dem ein Prozentzeichen vorangestellt und angehängt ist. Dadurch wird sichergestellt, dass der Platzhalter an beiden Enden der Suchzeichenfolge angewendet wird.

Durch die Verwendung dieser Methode eliminieren Sie das Risiko von SQL-Injection-Angriffen und stellen sicher, dass die Abfrage ohne Formatierungsfehler ausgeführt wird.

Das obige ist der detaillierte Inhalt vonWie kann ich Python-Strings für SQL-LIKE-Abfragen mit Platzhaltern richtig formatieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn