Come visualizzare una stringa SQL che è stata costruita dal cursore MySQLDB?
-
27-10-2019 - |
Domanda
Vorrei verificare di persona come questa stringa MySQL viene tradotta dal cursore:
cursor.execute("SELECT * from elements where id = %s", (element_id))
Esiste un modo per ottenere la stringa SQL calcolata e stamparla, preferibilmente prima dell'esecuzione?(quest'ultimo non è assolutamente necessario - lo sto facendo solo perché sto imparando Python e voglio assicurarmi che le mie stringhe SQL vengano disinfettate)
Soluzione
Sì.Come ha sottolineato Ferdinand, esiste un MySQLdb/cursors.py
contenente un execute()
, che a sua volta chiama _query()
.
Questo inserisce la query eseguita in self._executed
.
Quindi puoi ottenerlo da cursor._executed
.
Altri suggerimenti
MySQL-Python non fa nulla di speciale, codifica semplicemente ogni argomento per evitare iniezioni SQL e utilizza l'operatore standard Python %
per sostituire i segnaposto %s
con gli argomenti codificati.
Se vuoi davvero vedere il risultato, esegui lo stesso codice di 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
Vedi la definizione di execute()
che inizia alla riga 168 in MySQLdb/cursors.py
.