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。
试图查看每个 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。