【问题标题】:How can I log queries in Sqlite3 with Python?如何使用 Python 在 Sqlite3 中记录查询?
【发布时间】:2021-06-30 03:30:50
【问题描述】:

我在我的 Python 应用程序中使用 Sqlite3 数据库并使用参数替换对其进行查询。
例如:

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

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

【问题讨论】:

  • 看起来类似于 this 问题,尽管该示例未指定 Python。看看有没有帮助。

标签: python logging sqlite


【解决方案1】:

Python 3.3 有sqlite3.Connection.set_trace_callback:

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

您作为参数提供的函数会为通过该特定 Connection 对象执行的每个 SQL 语句调用。您可能想要使用来自logging 模块的函数,而不是print

【讨论】:

  • 会记录所有查询的查询信息还是仅记录我自己的应用程序的查询信息?
  • 它只会记录那些通过特定 Connection 对象(上面的connection)进行的查询。我已经更新了答案。
  • 如果您使用的是日志基础设施,值得注意的是,您可以无缝地将“print”替换为“logging.debug”。
【解决方案2】:

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

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

所以你根本不要修改你的查询

此外,这不是特定于 Sqlite 的。

【讨论】:

  • 这会产生错误的结果。 Sqlite 将在包含字符串时转义您的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2021-09-06
  • 2021-02-06
  • 2015-05-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多