簡體   English   中英

如何在 Django 中獲取 COUNT 查詢

[英]How to get COUNT query in django

要在 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'

文檔:

數數()

返回一個整數,表示數據庫中與 QuerySet 匹配的對象數。

因此,你不能。

但是,您可以使用django.db.connection.queries來查看和訪問當前進程所做的查詢。

>>> from django.db import connection
>>> User.objects.count()
>>> print connection.queries

請注意,這僅在DEBUG=True並且您無法從另一個進程訪問它們,您無法在視圖之間共享。

最好的選擇是使用Django 調試工具欄

CaptureQueriesContext將在運行后為您獲取查詢,我認為無需DEBUG

from django.test.utils import CaptureQueriesContext
with CaptureQueriesContext(conn) as queries:
    value = User.objects.count()
    print(queries.captured_queries[0]['sql'])

如果打開了 DEBUG,您始終可以從連接對象中獲取 Django 執行的查詢,如文檔中所述

如果您只想查看查詢,只需安裝 Django 調試工具欄: https : //github.com/django-debug-toolbar/django-debug-toolbar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM