python - 如何查看 Django ORM 运行的查询?
问题描述
我有DEBUD = True
档案settings.py
。我MySQL
有用 django 配置的数据库。我有一个Course
模型courses/models.py
。在courses/views.py
中,我有:
@api_view(['GET'])
def courses_list(request):
courses = Course.objects.all()
serializer = CourseSerializer(courses, many=True)
return Response(serializer.data)
现在,如果我向邮递员提出请求以点击此视图,我认为SELECT * FROM COURSES
必须执行一些查询。当我向某个后端 URL 发出请求时,如何查看已执行哪些查询?
我也按照这里from django.db import connection
的描述尝试过,但是得到了这样的空数组:
>>> from django.db import connection
>>> connection.queries
[]
请帮助我实现我想要的。
解决方案
如果您在单独的 shell 中运行它,那么它当然不会包含另一个正在运行的程序的查询。答案涉及您在 shell 本身中执行的查询。
例如,如果您将使用:
>>> print(Course.objects.all())
>>> from django.db import connection
>>> connection.queries
它将显示一个查询,因为您强制QuerySet
在该外壳中评估 a 。
您可以使用像django-sqlprint-middleware
打印查询这样的包。所以你安装它,例如在本地环境中:
pip install django-sqlprint-middleware
MIDDLEWARE
然后在设置中添加这个中间件settings.py
:
# settings.py
MIDDLEWARE = (
# …,
'django_sqlprint_middleware.SqlPrintMiddleware',
# …,
)
这只会DEBUG
在或TESTING
设置为时打印查询True
。但是,我建议无论如何不要在生产中使用它。
推荐阅读
- java - 如何使用 getPurchases() - Android
- strapi - Strapi - 无法使用 Google 云存储提供商上传图像文件
- vulkan - 如何使用 VkPipelineCache?
- vb.net - 如何从任何文本框中删除重复项
- html - 用我的 JSON 数组循环树枝 DIV 和列表
- r - 如何计算一维数据集的树状图,例如 R 中的 {1,23,45}
- json - 数组中严格对象的 JSON Schema
- android - 在 ActionBarTabs (ViewPager) 中更改布局/片段文件
- java - 从批处理端更新数据库时,在 webapp 端刷新 Hibernate 缓存级别 2
- android - 无法在房间数据库的实体类中创建构造函数重载