要在django中获取查询,我可以这样做:
>>> print User.objects.all().query
SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`password`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`is_superuser`, `auth_user`.`last_login`, `auth_user`.`date_joined`
FROM `auth_user`
但是,如何在执行COUNT时获取它构建的查询?
>>> User.objects.all().count().query
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'int' object has no attribute 'query'
答案 0 :(得分:5)
来自docs:
<强>计数()强>
返回整数,表示与QuerySet匹配的数据库中的对象数。
因此,不能。
但是,您可以使用django.db.connection.queries
来查看和访问当前流程所做的查询。
>>> from django.db import connection
>>> User.objects.count()
>>> print connection.queries
请注意,这仅适用于DEBUG=True
且您无法从其他进程访问它们时,您无法在视图之间共享。
最好的选择是使用Django debug toolbar。
答案 1 :(得分:0)
如果启用了DEBUG,您可以始终从连接对象获取Django执行的查询,如in the documentation所述。
答案 2 :(得分:0)
如果您只想查看查询,只需安装Django调试工具栏:https://github.com/django-debug-toolbar/django-debug-toolbar
答案 3 :(得分:0)
CaptureQueriesContext
将在查询运行后为您抓取查询,我认为在没有DEBUG
的情况下可以使用该查询:
from django.test.utils import CaptureQueriesContext
with CaptureQueriesContext(conn) as queries:
value = User.objects.count()
print(queries.captured_queries[0]['sql'])