जवाबों:
प्रत्येक QuerySet ऑब्जेक्ट में एक query
विशेषता है कि आप डीबगिंग उद्देश्यों के लिए लॉगआउट या प्रिंट कर सकते हैं।
qs = Model.objects.filter(name='test')
print qs.query
संपादित करें
मैंने HTML टिप्पणियों के रूप में एकल अनुरोध के दायरे में प्रश्नों को इंजेक्ट करने के लिए कस्टम टेम्पलेट टैग ( इस स्निपेट में उल्लिखित ) का भी उपयोग किया है ।
prefetch_related
2 प्रश्नों के साथ काम करता है ? मैं केवल 1 देखता हूं
<django.db.models.sql.query.Query object
तुम भी Django द्वारा उत्पन्न सभी प्रश्नों को लॉग करने के लिए अजगर लॉगिंग का उपयोग कर सकते हैं। बस इसे अपनी सेटिंग फ़ाइल में जोड़ें।
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
},
},
}
मामले के अनुप्रयोग में एक और विधि html आउटपुट उत्पन्न कर रही है - django डिबग टूलबार का उपयोग किया जा सकता है।
'level': 'DEBUG'
नीचे जोड़ना पड़ा 'django.db'
।
जब तक DEBUG
है:
from django.db import connection
print(connection.queries)
एक व्यक्तिगत प्रश्न के लिए, आप यह कर सकते हैं:
print(Model.objects.filter(name='test').query)
query
लौटाता हैQuery
जिसमें as_sql
विशेषता नहीं है ।
शायद आपको django-debug-toolbar
आवेदन पर एक नज़र डालनी चाहिए , यह आपके लिए सभी प्रश्नों को लॉग करेगा, उनके लिए प्रोफाइलिंग जानकारी प्रदर्शित करेगा और बहुत कुछ।
यदि आप डेटाबेस रूटिंग का उपयोग कर रहे हैं, तो संभवतः आपके पास एक से अधिक डेटाबेस कनेक्शन हैं। इस तरह कोड आपको एक सत्र में कनेक्शन देखने देता है। आप एक ही कनेक्शन के साथ उसी तरह से आँकड़े रीसेट कर सकते हैं: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 क्वेरी देखने के लिए आप Django डीबग_टूलबार का उपयोग कर सकते हैं। Debug_toolbar उपयोग के लिए चरण दर चरण मार्गदर्शिका:
pip install django-debug-toolbar
Settings.py =>
INSTALLED_APPS= [ 'debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
Settings.py => नई सूची बनाएं settings.py फ़ाइल के अंत में और नीचे दी गई सूची जोड़ें:
INTERNAL_IPS= [127.0.0.1']
यह डीबग को केवल आंतरिक डेवलपमेंट सर्वर पर चलाने की अनुमति देगा
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls))
] + urlpatterns
आपको अपने वेब पेज पर 127.0.0.1 पर एक ऐड-ऑन दिखाई देगा और यदि आप SQL क्वेरी चेक बॉक्स पर क्लिक करते हैं, तो आप वास्तव में क्वेरी का रन समय भी देख सकते हैं।