如何使用Python在Sqlite3中记录查询?

gen*_*nad 12 python sqlite logging

我在我的Python应用程序中使用Sqlite3数据库并使用参数替换查询它.
例如:

cursor.execute('SELECT * FROM table WHERE id > ?', (10,))
Run Code Online (Sandbox Code Playgroud)

有些查询没有正确返回结果,我想记录它们并尝试手动查询sqlite.
如何使用参数而不是问号来记录这些查询?

Mar*_*l M 16

Python 3.3有sqlite3.Connection.set_trace_callback:

import sqlite3
connection = sqlite3.connect(':memory:')
connection.set_trace_callback(print)
Run Code Online (Sandbox Code Playgroud)

您为参数提供的函数将通过该特定Connection对象执行的每个SQL语句调用.print您可能希望使用logging模块中的函数,而不是.

  • 如果您正在使用日志记录基础设施,值得注意的是您可以无缝地将“print”替换为“logging.debug”。 (2认同)

dug*_*res 0

假设您有一个日志函数,您可以先调用它:

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

所以你根本不用修改你的查询。

而且,这不是 Sqlite 特有的。

  • 这会产生错误的结果。当数据包含字符串时,Sqlite 会转义你的数据 (7认同)