2010-10-07 15 views
6

Jak mogę zobaczyć moje zapytania django z zarządzać sprzęgowi ShellDjango Jak wyświetlić zapytanie w zarządzanie skorupę

Próbowałem, używając tego, ale daje mi pytania, które przechodzą przez serwer django

from django.db import connection 
connection.queries() 

I widziałem to gdzieś, nie pamiętam gdzie?

+1

możliwy duplikat [Django: show/log ORM sql wywołania z powłoki Pythona] (http: // stackoverflow.com/questions/2314920/django-show-log-orm-sql-calls-from-python-shell) – tyrion

Odpowiedz

5

Django Jak wyświetlić zapytanie w zarządzanie Shell

Istnieją dwa sposoby wyświetlania kwerendy w skorupy. Po pierwsze, jeśli używasz zestawu zapytań, możesz użyć atrybutu query zestawu zapytań. Dla np.

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

Po drugie, zapytanie nie jest natychmiast widoczne. Dla np. podczas aktualizowania zestawu zapytań za pomocą update(). W tym przypadku można:

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 

Próbowałem, używając tego, ale daje mi pytania, które przechodzą przez serwer django

Nie rozumiem co masz na myśli przez „daje mi zapytań przechodzić przez serwer Django ". Czy próbujesz zobaczyć zapytania podczas uruchamiania aplikacji? W takim przypadku należy użyć django-debug-toolbar lub snippet, o których mowa w @rubayeet.

+0

Ok, to, co robiłem, to przypisywanie zestawu zapytań do zmiennej np. Cur = Entry.objects.all(). Ale teraz jestem OK. dzięki – gath

1

Można wydrukować SQL dla poszczególnych zapytań tak:

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

Czy to wszystko jest potrzebne?

+0

Czy wyświetla surową instrukcję SQI? – gath

+0

@gath: Tak, robi. – sdolan

2

Najprostszym sposobem jest użycie django extensions. Można go zainstalować z

$ pip install django-extensions 

Uruchom powłokę z

./manage.py shell_plus --print-sql 

uruchomić kwerendę

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>]> 

Jeśli nie chcesz dołączyć --print-sql za każdym razem, w ustawieniach Django możesz ustawić

SHELL_PLUS_PRINT_SQL = True 

Alternatywnym sposobem jest włączenie rejestrowania zapytań 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', 
     } 
    }, 
} 

Dodaj to do swoich ustawień i uruchom ponownie swoją powłokę, aby zobaczyć zapytania SQL.

Powiązane problemy