如何用Python记录Sqlite3中的查询?

25 投票
2 回答
11595 浏览
提问于 2025-04-16 22:52

我在我的Python应用中使用Sqlite3数据库,并通过参数替换来查询数据。
比如说:

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

有些查询没有正确返回结果,我想记录这些查询,然后手动尝试查询sqlite。
我该如何记录这些带参数的查询,而不是用问号代替?

2 个回答

0

假设你有一个日志记录的功能,你可以先调用它:

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

这样你就不需要修改你的查询了。

而且,这并不是说只适用于Sqlite。

40

Python 3.3 版本引入了一个叫做 sqlite3.Connection.set_trace_callback 的功能:

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

你传入的这个函数会在每次通过这个特定的连接对象执行 SQL 语句时被调用。与其使用 print,你可能更想用 logging 模块里的一个函数。

撰写回答