Yanıtlar:
Her QuerySet nesnesinin query
hata ayıklama amacıyla günlüğe kaydedebileceğiniz veya stdout'a yazdırabileceğiniz bir özniteliği vardır.
qs = Model.objects.filter(name='test')
print qs.query
Düzenle
Ayrıca HTML şablonu olarak tek bir istek kapsamındaki sorguları enjekte etmek için ( bu snippet'te belirtildiği gibi) özel şablon etiketleri kullandım .
prefetch_related
Yani 2 sorgu göster ile çalışır mı ? Sadece 1'i görüyorum.
<django.db.models.sql.query.Query object
Django tarafından oluşturulan tüm sorguları günlüğe kaydetmek için python günlüğünü de kullanabilirsiniz. Bunu ayarlar dosyanıza eklemeniz yeterlidir.
LOGGING = {
'disable_existing_loggers': False,
'version': 1,
'handlers': {
'console': {
# logging handler that outputs log messages to terminal
'class': 'logging.StreamHandler',
'level': 'DEBUG', # message level to be written to console
},
},
'loggers': {
'': {
# this sets root level logger to log debug and higher level
# logs to console. All other loggers inherit settings from
# root level logger.
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False, # this tells logger to send logging message
# to its parent (will send if set to True)
},
'django.db': {
# django also has database level logging
},
},
}
Uygulama html çıktısı üretiyorsa başka bir yöntem - django hata ayıklama araç çubuğu kullanılabilir.
'level': 'DEBUG'
altına eklemek zorunda kaldım 'django.db'
.
Olduğu sürece DEBUG
:
from django.db import connection
print(connection.queries)
Tek bir sorgu için şunları yapabilirsiniz:
print(Model.objects.filter(name='test').query)
Belki django-debug-toolbar
uygulamaya bir göz atmanız gerekir , sizin için tüm sorguları günlüğe kaydeder, onlar için profil oluşturma bilgileri ve daha fazlasını görüntüler.
Veritabanı yönlendirmesi kullanıyorsanız, muhtemelen birden fazla veritabanı bağlantınız vardır. Bunun gibi kod, bir oturumdaki bağlantıları görmenizi sağlar. İstatistikleri tek bir bağlantıda olduğu gibi sıfırlayabilirsiniz:reset_queries()
from django.db import connections,connection,reset_queries
...
reset_queries() # resets data collection, call whenever it makes sense
...
def query_all():
for c in connections.all():
print(f"Queries per connection: Database: {c.settings_dict['NAME']} {c.queries}")
# and if you just want to count the number of queries
def query_count_all()->int:
return sum(len(c.queries) for c in connections.all() )
SQL sorgusunu görüntülemek için bir Django debug_toolbar kullanabilirsiniz. Debug_toolbar kullanımı için adım adım kılavuz:
pip install django-debug-toolbar
Settings.py =>
INSTALLED_APPS= [ 'debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
Settings.py dosyasının sonunda Settings.py => yeni liste oluştur & aşağıdaki listeye ekle:
INTERNAL_IPS= [127.0.0.1']
Bu, hata ayıklamanın yalnızca dahili geliştirme sunucusunda çalışmasına izin verir
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls))
] + urlpatterns
127.0.0.1'de web sayfanızda bir eklenti göreceksiniz ve SQL Sorgusu onay kutusuna tıklarsanız, sorgunun çalışma zamanını da görebilirsiniz.