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