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!