如何才能查看 Django 正在运行的原始 SQL 查询?
要查看 Django 正在执行的原始 SQL 查询,您可以使用多种方法,具体取决于
Django调试工具栏是
pip install django-debug-toolbar
添加'debug_toolbar'到您INSTALLED_APPS的settings.py。
'debug_toolbar'
INSTALLED_APPS
settings.py
将调试工具栏中间件包含在settings.py:
``` MIDDLEWARE = [ # … ‘debug_toolbar.middleware.DebugToolbarMiddleware’,
# … ] ```
INTERNAL_IPS = ['127.0.0.1']
urls.py
``` from django.conf import settings from django.conf.urls import include from django.urls import path
urlpatterns = [ # Your other URL patterns… ]
if settings.DEBUG: import debug_toolbar urlpatterns = [ path(‘debug/’, include(debug_toolbar.urls)), ] + urlpatterns ```
现在,当您加载页面时,调试工具栏将会出现,您可以点击“SQL”面板查看针对该请求执行的所有原始 SQL 查询。
如果您想查看 Django 在您的代码中运行的 SQL 查询(例如在测试期间或在 Django shell 中),您可以启用查询日志记录:
python manage.py shell
``` from django.db import connection
# Enable SQL logging connection.queries = []
# Execute some queries here…
# Print out the executed queries from pprint import pprint pprint(connection.queries) ```
或者,如果您想查看在特定代码块中运行的 SQL 查询,请使用:
from django.db import connection # Run some code that hits the database with connection.cursor() as cursor: # Your code that triggers SQL queries # Example: MyModel.objects.filter(...).first() pass # Print the SQL queries that were executed for query in connection.queries: print(query['sql'])
您还可以通过调整以下内容来配置 Django 以将 SQL 查询记录到控制台settings.py:
LOGGING
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'level': 'DEBUG', # Change to DEBUG to see all queries }, }, }
每次 Django 执行查询时,此配置都会将 SQL 查询输出到控制台。
query
如果您想查看特定查询的原始 SQL,可以使用.queryDjango QuerySet 上的属性:
.query
from myapp.models import MyModel # Get a QuerySet queryset = MyModel.objects.filter(name='example') # Print the raw SQL print(queryset.query)
选择最适合您的调试或开发需求的方法!