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 Debug Toolbar に由来します。