【发布时间】:2020-06-25 01:15:43
【问题描述】:
所以我也需要实现自己的 CursorWrappedDebug 来记录错误查询(在文件 django.db.backends.utils.py 中)。 我已经完成了:
logger = logging.getLogger('django.db.backends')
class CustomCursorDebugWrapper(CursorWrapper):
def execute(self, sql, params=None):
start = time()
try:
return super(CustomCursorDebugWrapper, self).execute(sql, params)
except Error as e:
exception=e
finally:
stop = time()
duration = stop - start
sql = self.db.ops.last_executed_query(self.cursor, sql, params)
self.db.queries_log.append({
'sql': sql,
'time': "%.3f" % duration,
})
if 'exception' in locals():
logger.error('(%.3f) %s; args=%s' % (duration, sql, params),extra={'duration': duration, 'sql': sql, 'params': params})
raise exception
else:
logger.debug('(%.3f) %s; args=%s' % (duration, sql, params),extra={'duration': duration, 'sql': sql, 'params': params})
utils.CursorDebugWrapper = CustomCursorDebugWrapper
现在我需要将这些更改应用到整个项目(所有模块等)而不是当前文件。我应该像自定义数据库后端一样,如果是,那么如何实现自定义数据库后端。
已编辑 找到了解决方案(见链接)https://docs.djangoproject.com/en/3.0/ref/databases/#subclassing-the-built-in-database-backends
【问题讨论】:
-
我看到您已经找到了解决方案。请将其发布为答案。
标签: python django django-database