Wie kann eine SQL-Zeichenfolge angezeigt werden, die mit dem MySQLDB-Cursor erstellt wurde?
-
27-10-2019 - |
Frage
Ich möchte selbst überprüfen, wie diese MySQL-Zeichenfolge vom Cursor übersetzt wird:
cursor.execute("SELECT * from elements where id = %s", (element_id))
Gibt es eine Möglichkeit, an die berechnete SQL-Zeichenfolge zu gelangen und diese auszudrucken, vorzugsweise vor der Ausführung?(Letzteres ist nicht unbedingt erforderlich. Ich mache dies nur, weil ich Python lerne und sicherstellen möchte, dass meine SQL-Zeichenfolgen bereinigt werden.)
Lösung
Ja.Wie Ferdinand betont hat, gibt es ein MySQLdb/cursors.py
, der einen execute()
enthält, der wiederum _query()
aufruft.
Dadurch wird die ausgeführte Abfrage in self._executed
umgewandelt.
Sie können es also vom cursor._executed
abrufen.
Andere Tipps
MySQL-Python macht nichts Besonderes, es codiert nur jedes Argument, um SQL-Injektionen zu verhindern, und verwendet den Standardoperator %
von Python, um die Platzhalter %s
durch die codierten Argumente zu ersetzen.
Wenn Sie das Ergebnis wirklich sehen möchten, führen Sie denselben Code aus wie cursor.execute()
:
from MySQLdb.converters import get_codec
def prepare_sql(cursor, query, args=None):
if args is not None:
query = query % tuple(( get_codec(a, cursor.encoders)(db, a) for a in args ))
return query
Siehe die Definition von execute()
ab Zeile 168 in MySQLdb/cursors.py
.