小能豆

如何才能查看 Django 正在运行的原始 SQL 查询?

javascript

如何才能查看 Django 正在运行的原始 SQL 查询?


阅读 45

收藏
2024-09-02

共1个答案

小能豆

要查看 Django 正在执行的原始 SQL 查询,您可以使用多种方法,具体取决于

1.使用 Django 的调试工具栏

Django调试工具栏

  • 安装 Django 调试工具栏:

pip install django-debug-toolbar

  • 添加'debug_toolbar'到您INSTALLED_APPSsettings.py

  • 将调试工具栏中间件包含在settings.py

```
MIDDLEWARE = [
# …
‘debug_toolbar.middleware.DebugToolbarMiddleware’,

# …
]
```

  • 将以下设置添加到settings.py

INTERNAL_IPS = ['127.0.0.1']

  • 最后,将工具栏 URL 包含在您的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 查询。

2.在 Django Shell 或代码中启用 SQL 查询日志记录

如果您想查看 Django 在您的代码中运行的 SQL 查询(例如在测试期间或在 Django shell 中),您可以启用查询日志记录:

  • 打开 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'])

3.设置 Django 将 SQL 查询记录到控制台

您还可以通过调整以下内容来配置 Django 以将 SQL 查询记录到控制台settings.py

  • 修改文件LOGGING中的配置settings.py以包含 SQL 日志记录:

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 查询输出到控制台。

4.使用Django的QuerySetquery属性

如果您想查看特定查询的原始 SQL,可以使用.queryDjango QuerySet 上的属性:

from myapp.models import MyModel

# Get a QuerySet
queryset = MyModel.objects.filter(name='example')

# Print the raw SQL
print(queryset.query)

概括

  • Django Debug Toolbar:最适合在浏览器中进行实时调试。
  • Django Shell 或代码:适合检查脚本或 shell 中的 SQL 查询。
  • 日志配置:将所有 SQL 查询输出到控制台以进行更永久或连续的日志记录。
  • QuerySet.query属性:用于检查代码中特定查询的 SQL。

选择最适合您的调试或开发需求的方法!

2024-09-02