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