为Django查询生成原始SQL查询的3种方法

马哥Linux运维

共 1971字,需浏览 4分钟

 ·

2021-06-02 02:27

我们使用Django ORM使查询数据库变得非常容易,但是如果我们知道幕后发生了什么或对某些Django查询执行了什么SQL查询,对我们提升查询性能帮助会非常的大,以下是一些有用的方法,能帮助我们了解幕后的SQL语句是什么。

1.使用queryset的查询属性
这是在Django中查找原始SQL查询的最简单方法。

>>>queryset = Organization.objects.all()>>>print(queryset.query) Output:SELECT "app_organization"."id", "app_organization"."name", "app_organization"."created","app_organization"."updated"" FROM "app_organization">>>str(queryset.query)Output:'SELECT "app_organization"."id", "app_organization"."name", "app_organization"."created", "app_organization"."updated" FROM "app_organization"'


2.Django  connection

  这种方法比前一种方法提供的信息更多,因为我们可以找到原始SQL语句以及执行该语句所需的时间(以秒为单位)。
需要确保在settings.py文件中将此设置为DEBUG = True。

>>>from django.db import connection,reset_queries>>>Organization.objects.all()>>>connection.queriesOutput:[{'sql': 'SELECT "app_organization"."id", "app_organization"."name", "app_organization"."created", "app_organization"."updated" FROM "app_organization" LIMIT 21','time': '0.001'}]>>>reset_queries()Output:[]

注意:reset_queries()可随时用于手动清除查询列表。


3.Django调试工具栏
     Django Debug Toolbar是一组可配置的面板,显示有关当前请求/响应的各种调试信息,单击该工具时,将显示有关面板内容的更多详细信息,包括所有SQL查询,如图:


要在django项目中设置此工具栏,首先需要安装:

pip install django-debug-toolbar

然后在settings.py文件中设置DEBUG = True。

将“ debug_toolbar”添加到INSTALLED_APPS设置中。

INSTALLED_APPS = [ 'debug_toolbar',]

将调试工具栏的URL添加到项目的URLconf中。

import debug_toolbarfrom django.conf import settingsfrom django.urls import include, pathurlpatterns = [ ... path('__debug__/', include(debug_toolbar.urls)),]

调试工具栏主要在中间件中实现,应尽可能早地放在列表中。在settings.py模块中启用它,如下所示:

MIDDLEWARE = [# ... 'debug_toolbar.middleware.DebugToolbarMiddleware',# ...]

限制访问的IP地址,在INTERNAL_IPS设置的IP访问,才会显示“调试工具栏”。例如:对于本地开发,必须在INTERNAL_IPS中添加“ 127.0.0.1”。

INTERNAL_IPS = [# ... '127.0.0.1',# ...]

文章转载:Python运维技术

(版权归原作者所有,侵删)


点击下方“阅读原文”查看更多

浏览 51
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报