2015-02-21 10 views
5

Per ottenere una query in Django posso fare:Come arrivare interrogazione COUNT in 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` 

Tuttavia, come faccio a ottenere l'interrogazione si costruisce quando si fa un COUNT?

>>> User.objects.all().count().query 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
AttributeError: 'int' object has no attribute 'query' 

risposta

4

Da docs:

count()

restituisce un numero intero rappresenta il numero di oggetti nel database corrispondente al QuerySet.

Pertanto, è possibile non effettuare .

Tuttavia, è possibile utilizzare django.db.connection.queries per visualizzare e accedere alle query eseguite dal processo corrente.

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

Si noti che, questo funziona solo quando DEBUG=True e non è possibile accedervi da un altro processo, non è possibile condividere tra punti di vista.

L'opzione migliore sarebbe utilizzare Django debug toolbar.

+0

lo capisco. C'è un modo per vedere la query che django genera per ottenere il conteggio però? – Hockey127

0

Se DEBUG è attivo, è sempre possibile ottenere le query eseguite da Django dall'oggetto di connessione, come descritto in in the documentation.