Django orm,如何查看(或记录)执行的查询?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

有什么方法可以打印Django ORM生成的查询吗?

假设我执行以下语句:Model.objects.filter(name='test')

如何查看生成的SQL查询?

提问于
用户回答回答于

每个QuerySet对象都有一个query属性,可以将其记录或打印到stdout以进行调试。

qs = Model.objects.filter(name='test')
print qs.query

编辑

我还使用了自定义模板标记(如这个片段)将单个请求的范围中的查询作为HTML注释注入。

用户回答回答于

还可以使用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
        },
    },
}

另一种方法是生成html输出-Django调试工具栏可以使用。

扫码关注云+社区