Как я могу регистрировать запросы в Sqlite3 с Python? - PullRequest
11 голосов
/ 04 августа 2011

Я использую базу данных Sqlite3 в своем приложении Python и запрашиваю ее, используя подстановку параметров.Например:

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

Некоторые запросы не возвращают результаты должным образом, и я хотел бы зарегистрировать их и попытаться запросить sqlite вручную.Как я могу регистрировать эти запросы с параметрами вместо вопросительных знаков?

Ответы [ 2 ]

14 голосов
/ 07 июля 2015

Python 3.3 имеет sqlite3.Connection.set_trace_callback :

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

Функция, которую вы предоставляете в качестве аргумента, вызывается для каждого оператора SQL, который выполняется через этот конкретный объект Connection. Вместо print вы можете использовать функцию из модуля logging.

0 голосов
/ 04 августа 2011

Предполагая, что у вас есть функция журнала, вы могли бы сначала вызвать ее:

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

Таким образом, вы вообще не изменяете свой запрос .

Более того, это не специфично для Sqlite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...