158 django django-models django-orm
有没有办法可以打印Django ORM生成的查询?
假设我执行以下语句: Model.objects.filter(name='test')
如何查看生成的SQL查询?
Joe*_*way 172
每个QuerySet对象都有一个query属性,您可以将其记录或打印到stdout以进行调试.
qs = Model.objects.filter(name='test')
print qs.query
Run Code Online (Sandbox Code Playgroud)
编辑
我还使用自定义模板标记(如本片段中所述)将查询作为HTML注释注入单个请求的范围.
ais*_*baa 112
您还可以使用python日志记录来记录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
},
},
}
Run Code Online (Sandbox Code Playgroud)
在应用程序生成html输出的另一种方法 - 可以使用django调试工具栏.
Pra*_*mod 103
您可以在解释器上粘贴此代码,该解释器将显示所有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())
Run Code Online (Sandbox Code Playgroud)
Dan*_*man 70
只要DEBUG是:
from django.db import connection
print(connection.queries)
Run Code Online (Sandbox Code Playgroud)
对于单个查询,您可以执行以下操作:
print(Model.objects.filter(name='test').query)
Run Code Online (Sandbox Code Playgroud)
Mik*_*bov 30
也许您应该看一下django-debug-toolbar应用程序,它将为您记录所有查询,显示它们的分析信息等等.
| 归档时间: |
|
| 查看次数: |
82446 次 |
| 最近记录: |