Jak uzyskać kod SQL, który Django będzie używać w bazie danych z obiektu QuerySet? Próbuję debugować dziwne zachowanie, ale nie jestem pewien, jakie zapytania trafiają do bazy danych. Dzięki za pomoc.Uzyskiwanie kodu SQL z Django QuerySet
Odpowiedz
Użytkownik drukuje atrybut zestawu zapytań o wartości query
.
>>> queryset = MyModel.objects.all()
>>> print queryset.query
SELECT "myapp_mymodel"."id", ... FROM "myapp_mymodel"
Znalazłem [to] (https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/#automatic-spatial-transformations), które wspomina o tym w sposób dorozumiany, ale nic, co wyraźnie nie dokumentuje powyższej uwagi. – hanleyhansen
wynik zapytania 'query' nie jest prawidłowym kodem SQL, ponieważ" Django nigdy właściwie nie interpoluje parametrów: wysyła zapytanie i parametry osobno do adaptera bazy danych, który wykonuje odpowiednie operacje. " Źródło: https://code.djangoproject.com/ticket/17741 – gregoltsov
gdzie muszę napisać zapytanie ... MyModel to klasa, która znajduje się w pliku models.py ... Moja wątpliwość to miejsce, w którym muszę napisać kwerendę sql dla pobierz wartość z tabeli. –
proste:
print my_queryset.query
Na przykład:
from django.contrib.auth.models import User
print User.objects.filter(last_name__icontains = 'ax').query
Należy również wspomnieć, że jeśli masz DEBUG = True, to wszystkie zapytania są rejestrowane i można uzyskać je, uzyskując dostęp do connection.queries:
from django.db import connections
connections['default'].queries
Projekt używa tego do przedstawienia zapytań na stronie w zgrabny sposób.
To nie zawsze wyprowadza prawidłowy kod SQL, zobacz inne odpowiedzi. – aehlke
Nie ma sposobu na uzyskanie rzeczywistego SQL bez wykonania pierwszego zapytania, ostateczny SQL jest generowany przez otaczający sterownik RDBMS, a nie Django. Odpowiedź jest poprawna, ponieważ jest najbardziej dostępna w Django QuerySet. – danigosa
Niniejsza middleware będzie wyjście każde zapytanie SQL do konsoli, z podświetlaniem kolorów oraz czasu realizacji, to było bezcenne dla mnie w optymalizacji bardziej skomplikowanych wnioski z
Jako alternatywę dla innych odpowiedzi, django-devserver wyprowadza SQL do konsoli.
The accepted answer nie działa dla mnie podczas używania Django 1.4.4. Zamiast zapytania surowego zwrócono referencję do obiektu zapytania: <django.db.models.sql.query.Query object at 0x10a4acd90>
.
Poniższa powrócił zapytania:
>>> queryset = MyModel.objects.all()
>>> queryset.query.__str__()
Prawdopodobnie nie działało, ponieważ właśnie wpisałeś 'queryset.query' zamiast' print queryset.query', które wywołuje '__str __()' – hughes
@ hughes ma rację. Jeśli nie chcesz drukować go i chcesz go jako ciąg, zamiast wywoływania '__str __()', aby uzyskać go jako ciąg, powinieneś zrobić 'str (queryset.query)'. – Chad
Używam ipdb do debugowania i wypisuje referencję do obiektu zapytania, gdy wykonuję 'p queryset'. 'p queryset .__ str __()' daje pożądany wynik, więc jest to lepsza odpowiedź. – Rafay
- 1. Django QuerySet order
- 2. Django queryset z roku (data) = '2010'
- 3. Uzyskiwanie bieżącego kodu SQL bieżącego kodu CodeIgniter
- 4. Filtr Django na skrzyżowaniu queryset?
- 5. Wyjście Django QuerySet jako JSON
- 6. Co to jest django QuerySet?
- 7. Django leniwy QuerySet i paginacja
- 8. Django Queryset only() i defer()
- 9. Django queryset uzyskać dokładną manytomany odnośnika
- 10. Jak przekonwertować listę do queryset Django
- 11. QuerySet z .latest() za każdy dzień
- 12. dla queryset uporządkowanie danych w django-tables2
- 13. Filtr Django Haystack wyniki jak QuerySet?
- 14. Zastąp domyślny queryset w Django administratora
- 15. queryset zapytania django - wyszukiwanie imienia i nazwiska
- 16. Django QuerySet .defer() problem - błąd lub funkcja?
- 17. QuerySet, Object nie ma identyfikatora atrybutu - Django
- 18. Django M2M QuerySet filtrowanie wielu kluczy obcych
- 19. Count kontra len na Django QuerySet
- 20. Jak mogę uzyskać reprezentację ciąg z queryset w Django
- 21. W Django QuerySet, jak zrobić negację w filtrze?
- 22. Uzyskiwanie SQL z Rails Migration
- 23. Uzyskiwanie kodu waluty kraju
- 24. Iterowanie przez Django QuerySet podczas usuwania obiektów w tym samym QuerySet
- 25. Django opisywanie queryset na konkretnej wartości modelu relacyjnego atrybut
- 26. Uzyskiwanie kodu odpowiedzi nagłówka
- 27. Uzyskiwanie surowego kodu SQL wykonywanego przez laravel 4 migracje
- 28. Django: uzyskiwanie dostępu do instancji modelu z poziomu programu ModelAdmin?
- 29. Django - jak filtrować za pomocą QuerySet, aby uzyskać podzbiór obiektów?
- 30. Nowość: Django: dodawanie wyników do Queryset przed przekazaniem do szablonu
To nie jest duplikatem. powiązane pytanie to zupełnie inny temat. – craigds