如何查看 Django ORM 的查询 运行?

How to see queries run by Django ORM?

我在 settings.py 文件中有 DEBUD = True。我有 MySQL 配置了 django 的数据库。我在 courses/models.py 中有一个 Course 模型。在 courses/views.py 中,我有:

@api_view(['GET'])
def courses_list(request):
  courses = Course.objects.all()
  serializer = CourseSerializer(courses, many=True)
  return Response(serializer.data)

现在,如果我从 Postman 请求点击这个视图,我认为必须执行像 SELECT * FROM COURSES 这样的查询。当我向某个后端发出请求时,如何查看已执行了哪些查询 URL?

我也按照 here 的描述尝试了 from django.db import connection,但是得到了这样的空数组:

>>> from django.db import connection
>>> connection.queries
[]

请帮我实现我想要的。

运行 你的 Django 应用是这样的:

./manage.py shell_plus --print-sql

并且您应该会看到此 shell

中打印的查询

如果你 运行 在一个单独的 shell 中,那么这当然不会包含 另一个 运行ning 程序的查询.答案涉及您在 shell 本身中执行的查询。

例如,如果您要使用:

>>> print(Course.objects.all())
>>> from django.db import connection
>>> connection.queries

它会显示一个查询,因为您在 that shell.

中强制计算了 QuerySet

您可以使用 django-sqlprint-middleware 这样的包来打印查询。所以你安装它,例如在本地环境中:

pip install <b>django-sqlprint-middleware</b>

然后在settings.pyMIDDLEWARE设置中加入这个中间件:

# settings.py

MIDDLEWARE = (
    # …,
    <b>'django_sqlprint_middleware.SqlPrintMiddleware'</b>,
    # …,
)

DEBUGTESTING 设置为 True 时,这将 打印查询。但是,我建议无论如何不要在生产中使用它。