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)

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top