admin

在保留settings.DEBUG的同时关闭SQL日志记录?

sql

当settings.DEBUG =
True时,Django将SQL操作记录到内部缓冲区(无论是否记录到文件)中。因为我有一个长时间运行的过程,需要执行许多数据库操作,所以这会使我的程序的开发模式实例的内存消耗迅速增加。

我想在保留设置的同时禁用内部SQL日志记录机制.DEBUG已为我的开发打开:这可能吗?

Django版本1.3.0。


阅读 168

收藏
2021-05-10

共1个答案

admin

当settings.DEBUG为True时,Django使用CursorDebugWrapper而不是CursorWrapper。这就是将查询追加到connection.queries并消耗内存的原因。我会猴子补丁连接包装,以始终使用CursorWrapper:

from django.conf import settings
from django.db.backends import BaseDatabaseWrapper
from django.db.backends.util import CursorWrapper

if settings.DEBUG:
    BaseDatabaseWrapper.make_debug_cursor = lambda self, cursor: CursorWrapper(cursor, self)

像其他人建议的那样禁用日志记录将无法解决问题,因为即使关闭了日志记录,CursorDebugWrapper仍将查询存储在connection.queries中。

2021-05-10