我扩展了 Django CursorDebugWrapper 执行例程,因此在服务器端我可以跟踪所有执行的 SQL。看起来像这样:
class PrintQueryWrapper(django.db.backends.util.CursorDebugWrapper):
def execute(self, sql, params=()):
try:
return self.cursor.execute(sql, params)
finally:
# record sql and do other stuff
django.db.backends.util.CursorDebugWrapper = PrintQueryWrapper
问题是我需要每个用户会话单独执行此操作,否则它将记录所有用户的所有 sql,而不知道来自哪里的内容。如果我可以从 execute() 访问用户 ID,我可以轻松跟踪每个用户的 SQL,但如果无法访问请求对象,我不知道如何做到这一点。
注意:我不能为上述代码申请信用。它起源于 Django 调试工具栏。