Jawaban:
Setiap objek QuerySet memiliki query
atribut yang dapat Anda log atau cetak ke stdout untuk keperluan debugging.
qs = Model.objects.filter(name='test')
print qs.query
Edit
Saya juga menggunakan tag templat khusus (seperti yang diuraikan dalam cuplikan ini ) untuk menyuntikkan kueri dalam lingkup satu permintaan sebagai komentar HTML.
prefetch_related
menunjukkan 2 kueri? Saya hanya melihat 1.
<django.db.models.sql.query.Query object
Anda juga bisa menggunakan python logging untuk mencatat semua permintaan yang dihasilkan oleh Django. Cukup tambahkan ini ke file pengaturan Anda.
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
},
},
}
Metode lain dalam aplikasi kasus adalah menghasilkan keluaran html - django debug toolbar dapat digunakan.
'level': 'DEBUG'
bawah 'django.db'
.
Selama DEBUG
aktif:
from django.db import connection
print(connection.queries)
Untuk permintaan individual, Anda dapat melakukan:
print(Model.objects.filter(name='test').query)
query
mengembalikan Query
objek sejak Djagno 1.2 yang tidak memiliki as_sql
atribut.
Mungkin Anda harus melihat django-debug-toolbar
aplikasi, itu akan mencatat semua pertanyaan untuk Anda, menampilkan informasi profil untuk mereka dan banyak lagi.
Jika Anda menggunakan perutean basis data, Anda mungkin memiliki lebih dari satu koneksi basis data. Kode seperti ini memungkinkan Anda melihat koneksi dalam satu sesi. Anda dapat mengatur ulang statistik dengan cara yang sama seperti dengan satu koneksi: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() )
Anda bisa menggunakan Django debug_toolbar untuk melihat kueri SQL. Panduan langkah demi langkah untuk penggunaan debug_toolbar:
pip install django-debug-toolbar
Settings.py =>
INSTALLED_APPS= [ 'debug_toolbar']
MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']
Settings.py => buat daftar baru di akhir file settings.py & tambahkan daftar di bawah ini:
INTERNAL_IPS= [127.0.0.1']
Ini akan memungkinkan debug dijalankan hanya pada server pengembangan internal
if settings.DEBUG:
import debug_toolbar
urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls))
] + urlpatterns
Anda akan melihat add-on di halaman web Anda di 127.0.0.1 & jika Anda mengklik kotak centang SQL Query, Anda benar-benar dapat melihat jangka waktu kueri juga.