2010-10-07 9 views
6

Come posso vedere le mie domande Django da gestire l'interfaccia della shellDjango Come faccio a visualizzare query nel gestire guscio

Ho provato con questo, ma mi dà le query che passano attraverso il server di Django

from django.db import connection 
connection.queries() 

I l'ho visto da qualche parte, non ricordo dove ??

+1

possibile duplicato di [Django: show/log chiamate sql ORM dalla shell python] (http: // stackoverflow.it/questions/2314920/django-show-log-orm-sql-calls-from-python-shell) – tyrion

risposta

5

Django Come si visualizza interrogare nel gestore shell

Ci sono due modi per visualizzare la query nella shell. Innanzitutto, se si utilizza un queryset, è possibile utilizzare l'attributo query del set di query. Ad es.

qs = MyModel.objects.all() 
print qs.query 

Secondo quando la query non è visibile immediatamente. Ad es. quando si aggiorna un queryset usando update(). In questo caso è possibile:

from django.db import connection 
MyModel.objects.all().update(foo = 'bar') 
print connection.queries 
# print connection.queries[-1] # if you want to see only the last query 

Ho provato con questo, ma mi dà le query che passare attraverso il server di Django

non capisco cosa si intende per "mi dà le query che passare attraverso il server Django ". Stai cercando di vedere le query durante l'esecuzione dell'applicazione? In tal caso, utilizzare django-debug-toolbar o snippet a cui si riferisce @rubayeet.

+0

Ok, quello che stavo facendo era assegnare il queryset ad una variabile, ad esempio cur = Entry.objects.all(). Ma sto bene ora. Grazie – gath

1

È possibile stampare l'SQL per le query individuali in questo modo:

your_query = YourModel.objects.all() 
print your_query.query 

E 'questo tutto ciò che serve?

+0

Mostra l'istruzione SQl raw? – gath

+0

@gath: Sì, sì. – sdolan

2

Il modo più semplice è utilizzare django extensions. È possibile installarlo con

$ pip install django-extensions 

Iniziare la shell con

./manage.py shell_plus --print-sql 

Eseguire una query

In [1]: Book.objects.all() 
Out[1]: SELECT "book_book"."id", "book_book"."name", "book_book"."author_id" FROM "book_book" LIMIT 21 

Execution time: 0.087548s [Database: default] 

<QuerySet [<Book: The Stranger>, <Book: Atlas Shrugged>]> 

Se non si desidera aggiungere --print-sql ogni volta, nelle impostazioni Django, puoi impostare

SHELL_PLUS_PRINT_SQL = True 

Un modo alternativo è abilitare la registrazione per le query db.

LOGGING = { 
    'version': 1, 
    'loggers': { 
     'django.db.backends': { 
      'level': 'DEBUG', 
      'handlers': ['console'], 
     } 
    }, 
    'handlers': { 
     'console': { 
      'level': 'DEBUG', 
      'class': 'logging.StreamHandler', 
      'filters': ['require_debug_true'], 
     } 
    }, 
    'filters': { 
     'require_debug_true': { 
      '()': 'django.utils.log.RequireDebugTrue', 
     } 
    }, 
} 

Aggiungi questo alle impostazioni e riavvia la shell per visualizzare le query SQL.

Problemi correlati