如何查看 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.py
的MIDDLEWARE
设置中加入这个中间件:
# settings.py
MIDDLEWARE = (
# …,
<b>'django_sqlprint_middleware.SqlPrintMiddleware'</b>,
# …,
)
当 DEBUG
或 TESTING
设置为 True
时,这将 仅 打印查询。但是,我建议无论如何不要在生产中使用它。
我在 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.py
的MIDDLEWARE
设置中加入这个中间件:
# settings.py
MIDDLEWARE = (
# …,
<b>'django_sqlprint_middleware.SqlPrintMiddleware'</b>,
# …,
)
当 DEBUG
或 TESTING
设置为 True
时,这将 仅 打印查询。但是,我建议无论如何不要在生产中使用它。