답변:
각 QuerySet 오브젝트에는 query
디버깅 목적으로 stdout에 로그하거나 인쇄 할 수 있는 속성이 있습니다.
qs = Model.objects.filter(name='test')
print qs.query
편집하다
또한 이 스 니펫에 설명 된대로 사용자 지정 템플릿 태그를 사용 하여 단일 요청 범위에 쿼리를 HTML 주석으로 삽입했습니다.
prefetch_related
즉,이 쿼리를 보여?
<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)
데이터베이스 라우팅을 사용하는 경우 둘 이상의 데이터베이스 연결이있을 수 있습니다. 이와 같은 코드를 사용하면 세션에서 연결을 볼 수 있습니다. 단일 연결에서와 같은 방법으로 통계를 재설정 할 수 있습니다.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() )
Django debug_toolbar를 사용하여 SQL 쿼리를 볼 수 있습니다. 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 쿼리 확인란을 클릭하면 실제로 쿼리 실행 시간도 볼 수 있습니다.