Django的Orm,如何查看(或logging)执行的查询?
有没有办法可以打印Django ORM正在生成的查询?
说我执行以下语句: Model.objects.filter(name='test')
我怎样才能看到生成的SQL查询?
每个QuerySet对象都有一个query
属性,您可以logging或打印到标准输出以进行debugging。
qs = Model.objects.filter(name='test') print qs.query
编辑
我还使用了自定义模板标签( 如此代码段所述 )将查询作为HTML注释插入到单个请求的范围中。
您还可以使用python日志logging来logging由Django生成的所有查询。 只需将其添加到您的设置文件。
LOGGING = { 'disable_existing_loggers': False, 'version': 1, 'handlers': { 'console': { # logging handler that outputs log messages to terminal 'class': 'logging.StreamHandler', 'level': 'DEBUG', # message level to be written to console }, }, 'loggers': { '': { # this sets root level logger to log debug and higher level # logs to console. All other loggers inherit settings from # root level logger. 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, # this tells logger to send logging message # to its parent (will send if set to True) }, 'django.db': { # django also has database level logging }, }, }
应用程序生成html输出的另一种方法 – 可以使用djangodebugging工具栏 。
您可以将此代码粘贴到您的解释器上,该解释器将显示所有的SQL查询:
# To get all sql queries sent by Django from py shell import logging l = logging.getLogger('django.db.backends') l.setLevel(logging.DEBUG) l.addHandler(logging.StreamHandler())
只要DEBUG
在:
from django.db import connection print connection.queries
对于单个查询,您可以执行:
print Model.objects.filter(name='test').query
也许你应该看看django-debug-toolbar
应用程序,它会logging所有的查询,为他们显示分析信息等等。
一个强大的解决scheme是让你的数据库服务器login到一个文件,然后
tail -f /path/to/the/log/file.log