為Django查詢生成原始SQL查詢的3種方法

我們使用Django ORM使查詢數(shù)據(jù)庫變得非常容易,但是如果我們知道幕后發(fā)生了什么或?qū)δ承〥jango查詢執(zhí)行了什么SQL查詢,對我們提升查詢性能幫助會(huì)非常的大,以下是一些有用的方法,能幫助我們了解幕后的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
這種方法比前一種方法提供的信息更多,因?yàn)槲覀兛梢哉业皆糞QL語句以及執(zhí)行該語句所需的時(shí)間(以秒為單位)。
需要確保在settings.py文件中將此設(shè)置為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()可隨時(shí)用于手動(dòng)清除查詢列表。
3.Django調(diào)試工具欄
Django Debug Toolbar是一組可配置的面板,顯示有關(guān)當(dāng)前請求/響應(yīng)的各種調(diào)試信息,單擊該工具時(shí),將顯示有關(guān)面板內(nèi)容的更多詳細(xì)信息,包括所有SQL查詢,如圖:

要在django項(xiàng)目中設(shè)置此工具欄,首先需要安裝:
pip install django-debug-toolbar
然后在settings.py文件中設(shè)置DEBUG = True。
將“ debug_toolbar”添加到INSTALLED_APPS設(shè)置中。
INSTALLED_APPS = ['debug_toolbar',]
將調(diào)試工具欄的URL添加到項(xiàng)目的URLconf中。
import debug_toolbarfrom django.conf import settingsfrom django.urls import include, pathurlpatterns = [...path('__debug__/', include(debug_toolbar.urls)),]
調(diào)試工具欄主要在中間件中實(shí)現(xiàn),應(yīng)盡可能早地放在列表中。在settings.py模塊中啟用它,如下所示:
MIDDLEWARE = [# ...'debug_toolbar.middleware.DebugToolbarMiddleware',# ...]
限制訪問的IP地址,在INTERNAL_IPS設(shè)置的IP訪問,才會(huì)顯示“調(diào)試工具欄”。例如:對于本地開發(fā),必須在INTERNAL_IPS中添加“ 127.0.0.1”。
INTERNAL_IPS = [# ...'127.0.0.1',# ...]
(版權(quán)歸原作者所有,侵刪)
![]()

點(diǎn)擊下方“閱讀原文”查看更多
