J'utilise la base de données Sqlite3 dans mon application Python et l'interroge à l'aide de la substitution de paramètres.
Par exemple:
cursor.execute("SELECT * FROM table WHERE id > ?", (10,))
Certaines requêtes ne renvoient pas les résultats correctement et j'aimerais les consigner et essayer d'interroger manuellement sqlite.
Comment enregistrer ces requêtes avec des paramètres plutôt que des points d'interrogation?
Réponses:
10 pour la réponse № 1Python 3.3 a sqlite3.Connection.set_trace_callback:
import sqlite3
connection = sqlite3.connect(":memory:")
connection.set_trace_callback(print)
La fonction que vous fournissez en tant qu'argument est appelée pour chaque instruction SQL exécutée. Au lieu de print
, vous voudrez peut-être utiliser une fonction du logging
module.
-1 pour la réponse № 2
En supposant que vous ayez une fonction de journal, vous pouvez l’appeler d’abord:
query, param = "SELECT * FROM table WHERE id > ?", (10,)
log(query.replace("?", "%s") % param)
cursor.execute(query, param)
Donc vous ne pas modifier votre requête du tout.
De plus, ceci n'est pas spécifique à Sqlite.