Programming

Django ORM 쿼리 세트의 해당 SQL 쿼리를 보는 방법은 무엇입니까?

procodes 2020. 6. 8. 22:03
반응형

Django ORM 쿼리 세트의 해당 SQL 쿼리를 보는 방법은 무엇입니까?


Django ORM이 생성하는 쿼리를 인쇄 할 수있는 방법이 있습니까?

다음 문장을 실행한다고 가정 해보십시오. Model.objects.filter(name='test')

생성 된 SQL 쿼리를 보려면 어떻게합니까?


각 QuerySet 오브젝트에는 query디버깅 목적으로 stdout에 로그하거나 인쇄 할 수 있는 속성이 있습니다.

qs = Model.objects.filter(name='test')
print qs.query

편집하다

또한 이 스 니펫에 설명 된대로 사용자 지정 템플릿 태그를 사용 하여 단일 요청 범위에 쿼리를 HTML 주석으로 삽입했습니다.


파이썬 로깅을 사용하여 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 디버그 도구 모음을 사용할 수 있습니다.


이 코드를 인터프리터에 붙여 넣으면 모든 SQL 쿼리가 표시됩니다.

# To get all sql queries sent by Django from py shell
import logging
l = logging.getLogger('django.db.backends')
l.setLevel(logging.DEBUG)
l.addHandler(logging.StreamHandler())

있는 DEBUG한 :

from django.db import connection
print(connection.queries)

개별 쿼리의 경우 다음을 수행 할 수 있습니다.

print(Model.objects.filter(name='test').query)

django-debug-toolbar응용 프로그램을 살펴보면 모든 쿼리를 기록하고 프로파일 링 정보 등을 표시합니다.


강력한 솔루션은 데이터베이스 서버가 파일에 로그 한 다음

tail -f /path/to/the/log/file.log

Django debug_toolbar를 사용하여 SQL 쿼리를 볼 수 있습니다. debug_toolbar 사용법에 대한 단계별 안내서 :

Debug_toolbar를 설치하십시오

pip install django-debug-toolbar

settings.py 파일을 편집하고 설치된 앱에 debug_toolbar를 추가하십시오. 아래에 'django.contrib.staticfiles'에 추가해야합니다. 또한 미들웨어에 debug_toolbar를 추가하십시오.

Settings.py =>

INSTALLED_APPS= [ 'debug_toolbar'] 

MIDDLEWARE = ['debug_toolbar.middleware.DebugToolbarMiddleware']

settings.py 파일에 INTERNAL_IPS라는 새 목록을 만듭니다.

Settings.py => settings.py 파일 끝에 새 목록을 만들고 아래 목록을 추가하십시오.

INTERNAL_IPS= [127.0.0.1']

이를 통해 디버그는 내부 개발 서버에서만 실행될 수 있습니다.

Edit urls.py file of #Project & add below code:

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
    url(r'^__debug__/', include(debug_toolbar.urls))       
    ] + urlpatterns

apply migrate & run server again

You will see an add-on on your web page at 127.0.0.1 & if you click on SQL Query check box, you can actually see the run time of query as well.

참고URL : https://stackoverflow.com/questions/971667/how-to-view-corresponding-sql-query-of-the-django-orms-queryset

반응형