Wie kann eine SQL-Zeichenfolge angezeigt werden, die mit dem MySQLDB-Cursor erstellt wurde?

StackOverflow https://stackoverflow.com/questions/7834746

  •  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.)

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top