Django+Raw Sql Query: 见get方法中Django ORM后面的raw sql query 运行

Django+Raw Sql Query: See raw sql query running behind Django ORM in get method

试图查看每个 Django ORM 后面的 SQL 查询 运行。

为此我正在做:

item = Item.objects.filter(Id=8177).query

这里我使用过滤器来获取多个 fetch.Above 查询给了我想要的输出。

现在问题开始了,当我尝试使用 get API

item = Item.objects.get(Id=8177).query

它获取一条记录,然后尝试查看 Django ORM 后面的原始 SQL 查询 运行 然后它显示如下:

AttributeError: 'Item' 对象没有属性 'query'

Django 不支持查看 get API 的 Raw SQL 查询吗?也许我是 wrong.Can 有人分享一些想法?

在您的日志记录配置的 loggers 部分添加名称为 django.db 的记录器。将其级别设置为 DEBUG 并将其处理程序设置为您要使用的任何处理程序。如果您希望您的日志显示在测试服务器启动屏幕本身中,请使用处理程序 console。确保您的 Django 应用 运行 处于 DEBUG 模式。

示例配置:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format': '[%(thread)d %(threadName)s %(process)d %(processName)s][%(asctime)s] %(levelname)s [%(name)s %(filename)s:%(lineno)s in %(funcName)s] %(message)s'
            }
        },
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
                'formatter': 'verbose',
            }
        },
        'loggers': {
            'django.db': {
                'handlers': ['console'],
                'level': 'DEBUG',
                'propagate': False,
            }
        }
    }

如果不想配置 LOGGING,可以使用 django.db.connection.queries 检查数据库查询:

from django import db
from app.models import MyModel

MyModel.objects.get(id=1)
print db.connection.queries

>>> [{'sql': 'Your query here', 'time': '0.001'}]

顺便说一句,get 方法在幕后使用 filter 和来自 _result_cache 的切片和 returns 这个切片。有时它也会将 order_by 应用于查询集。因此,您几乎总是可以通过检查具有相同参数的 filter 方法的查询来预测您的 SQL。