gpt4 book ai didi

sql - 查询的 Django 回溯

转载 作者:行者123 更新时间:2023-12-04 20:51:33 25 4
gpt4 key购买 nike

我希望从请求期间执行的每个查询中进行回溯,以便我可以找到它们的来源并减少计数/复杂性。

我正在使用 this列出和时间查询的优秀中间件片段,但我不知道它们来自哪里。

我在 django/db/models/sql/compiler.py 里四处闲逛但明显的形式是获取本地版本的 django 并编辑该代码,我不知道如何锁定查询。有我可以使用的信号吗?好像有isn't a signal on every query .

是否可以指定默认值 Manager ?

(我知道 django-toolbar,我希望有一个不使用它的解决方案。)

最佳答案

一个丑陋但有效的解决方案(例如,它在所有查询上打印跟踪并且只需要一次编辑)是将以下内容添加到 settings.py 的底部。 :

import django.db.backends.utils as bakutils
import traceback

bakutils.CursorDebugWrapper_orig = bakutils.CursorWrapper

def print_stack_in_project():
stack = traceback.extract_stack()
for path, lineno, func, line in stack:
if 'lib/python' in path or 'settings.py' in path:
continue
print 'File "%s", line %d, in %s' % (path, lineno, func)
print ' %s' % line

class CursorDebugWrapperLoud(bakutils.CursorDebugWrapper_orig):
def execute(self, sql, params=None):
try:
return super(CursorDebugWrapperLoud, self).execute(sql, params)
finally:
print_stack_in_project()
print sql
print '\n\n\n'

def executemany(self, sql, param_list):
try:
return super(CursorDebugWrapperLoud, self).executemany(sql, param_list)
finally:
print_stack_in_project()
print sql
print '\n\n\n'

bakutils.CursorDebugWrapper = CursorDebugWrapperLoud

仍然不确定是否有更优雅的方式来做到这一点?

关于sql - 查询的 Django 回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com