উত্তর:
প্রতিটি ক্যোরিসেট অবজেক্টের একটি query
বৈশিষ্ট্য রয়েছে যা আপনি লগিং করতে পারেন বা ডিবাগিংয়ের উদ্দেশ্যে stdout এ মুদ্রণ করতে পারেন।
qs = Model.objects.filter(name='test')
print qs.query
সম্পাদন করা
এইচটিএমএল মন্তব্য হিসাবে একক অনুরোধের সুযোগগুলিতে ক্যোয়ারীগুলি ইনজেক্ট করতে আমি কাস্টম টেম্পলেট ট্যাগগুলি ( এই স্নিপেটে বর্ণিত হিসাবে ) ব্যবহার করেছি ।
prefetch_related
2 কোয়েরি প্রদর্শন সঙ্গে কাজ করে ? আমি কেবল 1 টি দেখতে পাচ্ছি
<django.db.models.sql.query.Query object
জ্যাঙ্গোর দ্বারা উত্পন্ন সমস্ত প্রশ্নের লগ করতে আপনি পাইথন লগিং ব্যবহার করতে পারেন। এটি আপনার সেটিংস ফাইলটিতে যুক্ত করুন।
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
},
},
}
অ্যাপ্লিকেশন ক্ষেত্রে অন্য পদ্ধতিটি এইচটিএমএল আউটপুট তৈরি করছে - জ্যাঙ্গো ডিবাগ সরঞ্জামদণ্ড ব্যবহার করা যেতে পারে।
'level': 'DEBUG'
হয়েছিল 'django.db'
।
যতক্ষণ DEBUG
চলছে:
from django.db import connection
print(connection.queries)
একটি পৃথক প্রশ্নের জন্য, আপনি এটি করতে পারেন:
print(Model.objects.filter(name='test').query)
সম্ভবত আপনার 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() )
এসকিউএল কোয়েরি দেখতে আপনি একটি জ্যাঙ্গো ডিবাগ_টুলবার ব্যবহার করতে পারেন। ডিবাগ_টুলবার ব্যবহারের জন্য ধাপে ধাপে গাইড:
pip install django-debug-toolbar
Settings.py =>
INSTALLED_APPS= [ 'debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
সেটিংস.পাই => সেটিংস.পি ফাইলের শেষে নতুন তালিকা তৈরি করুন এবং নীচের তালিকায় যুক্ত করুন:
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 এ আপনার ওয়েব পৃষ্ঠায় একটি অ্যাড-অন দেখতে পাবেন এবং যদি আপনি এসকিউএল কোয়েরি চেক বাক্সে ক্লিক করেন, আপনি আসলে ক্যোয়ারির রান সময়ও দেখতে পাবেন।