2011-08-04 9 views
7

Używam bazy danych Sqlite3 w mojej aplikacji Pythona i wysyłam do niej zapytanie przy użyciu podstawiania parametrów.
Na przykład:Jak mogę logować kwerendy w Sqlite3 z Python?

cursor.execute('SELECT * FROM table WHERE id > ?', (10,)) 

Niektóre pytania nie zwracają wyników prawidłowo i chciałbym je i spróbuj zalogować się do kwerendy SQLite ręcznie.
Jak mogę rejestrować te zapytania za pomocą parametrów zamiast znaków zapytania?

+0

Wygląda podobnie do pytania [this] (http://stackoverflow.com/questions/1607368/sql-query-logging-for-sqlite), chociaż ten przykład nie określa języka Python. Sprawdź, czy to pomaga. – thegrinner

Odpowiedz

-1

Zakładając, że masz funkcję dziennika, można to nazwać pierwszy:

query, param = 'SELECT * FROM table WHERE id > ?', (10,) 
log(query.replace('?', '%s') % param) 
cursor.execute(query, param) 

Więc nie zmodyfikować zapytanie w ogóle.

Co więcej, nie jest to specyficzne dla Sqlite.

+4

Spowoduje to nieprawidłowe wyniki. Sqlite ucieknie od twoich danych, gdy zawiera ciągi – balrok

8

Python 3.3 ma sqlite3.Connection.set_trace_callback:

import sqlite3 
connection = sqlite3.connect(':memory:') 
connection.set_trace_callback(print) 

Funkcja podać jako argument jest wywoływana dla każdej instrukcji SQL, który jest wykonywany. Zamiast print, możesz chcieć użyć funkcji z modułu logging.