0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

馬哥Linux運維 ? 來源:Python運維技術(shù) ? 作者:Python運維技術(shù) ? 2021-06-04 16:36 ? 次閱讀

我們使用Django ORM使查詢數(shù)據(jù)庫變得非常容易,但是如果我們知道幕后發(fā)生了什么或?qū)δ承〥jango查詢執(zhí)行了什么SQL查詢,對我們提升查詢性能幫助會非常的大,以下是一些有用的方法,能幫助我們了解幕后的SQL語句是什么。

1.使用queryset的查詢屬性

這是在Django中查找原始SQL查詢的最簡單方法。

》》》queryset = Organization.objects.all()》》》print(queryset.query) Output:SELECT “app_organization”?!癷d”, “app_organization”?!皀ame”, “app_organization”。“created”,“app_organization”?!皍pdated”“ FROM ”app_organization“》》》str(queryset.query)Output:‘SELECT ”app_organization“?!眎d“, ”app_organization“?!眓ame“, ”app_organization“。”created“, ”app_organization“?!眜pdated“ FROM ”app_organization“’

2.Django connection

這種方法比前一種方法提供的信息更多,因為我們可以找到原始SQL語句以及執(zhí)行該語句所需的時間(以秒為單位)。 需要確保在settings.py文件中將此設(shè)置為DEBUG = True。

》》》from django.db import connection,reset_queries》》》Organization.objects.all()》》》connection.queriesOutput:[{‘sql’: ‘SELECT ”app_organization“?!眎d“, ”app_organization“?!眓ame“, ”app_organization“?!眂reated“, ”app_organization“?!眜pdated“ FROM ”app_organization“ LIMIT 21’,‘time’: ‘0.001’}]》》》reset_queries()Output:[]

注意:reset_queries()可隨時用于手動清除查詢列表。

3.Django調(diào)試工具欄 Django Debug Toolbar是一組可配置的面板,顯示有關(guān)當前請求/響應(yīng)的各種調(diào)試信息,單擊該工具時,將顯示有關(guān)面板內(nèi)容的更多詳細信息,包括所有SQL查詢。

要在django項目中設(shè)置此工具欄,首先需要安裝:

pip install django-debug-toolbar

然后在settings.py文件中設(shè)置DEBUG = True。

將“ debug_toolbar”添加到INSTALLED_APPS設(shè)置中。

INSTALLED_APPS = [ ‘debug_toolbar’,]

將調(diào)試工具欄的URL添加到項目的URLconf中。

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

調(diào)試工具欄主要在中間件中實現(xiàn),應(yīng)盡可能早地放在列表中。在settings.py模塊中啟用它,如下所示:

MIDDLEWARE = [# 。。。 ‘debug_toolbar.middleware.DebugToolbarMiddleware’,# 。。。]

限制訪問的IP地址,在INTERNAL_IPS設(shè)置的IP訪問,才會顯示“調(diào)試工具欄”。例如:對于本地開發(fā),必須在INTERNAL_IPS中添加“ 127.0.0.1”。

INTERNAL_IPS = [# 。。。 ‘127.0.0.1’,# 。。。]

文章轉(zhuǎn)載:Python運維技術(shù)

(版權(quán)歸原作者所有,侵刪)

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1541

    瀏覽量

    148930
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    750

    瀏覽量

    43900
  • URL
    URL
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    15220
  • Django
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    10343

原文標題:為Django查詢生成原始SQL查詢的3種方法

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    ClickHouse內(nèi)幕(3)基于索引的查詢優(yōu)化

    ClickHouse基于索引的查詢算子優(yōu)化方式。 在整個查詢計劃中Sort、Distinct、聚合這3個算子相比其他算子比如:過濾、projection等有如下幾個特點:1.算子需要再內(nèi)存中保存狀態(tài)
    的頭像 發(fā)表于 06-11 10:46 ?728次閱讀
    ClickHouse內(nèi)幕(<b class='flag-5'>3</b>)基于索引的<b class='flag-5'>查詢</b>優(yōu)化

    查詢SQL在mysql內(nèi)部是如何執(zhí)行?

    我們知道在mySQL客戶端,輸入一條查詢SQL,然后看到返回查詢的結(jié)果。這條查詢語句在 MySQL 內(nèi)部到底是如何執(zhí)行的呢?本文跟大家探討一下哈,我們先來看下MySQL基本架構(gòu)~
    的頭像 發(fā)表于 01-22 14:53 ?409次閱讀
    <b class='flag-5'>查詢</b><b class='flag-5'>SQL</b>在mysql內(nèi)部是如何執(zhí)行?

    labview與sql數(shù)據(jù)庫連接5種方法

    連接LabVIEW和SQL數(shù)據(jù)庫是一常見的需求,可以通過多種方法實現(xiàn)。本文將介紹五連接LabVIEW和SQL數(shù)據(jù)庫的
    的頭像 發(fā)表于 01-07 16:01 ?3779次閱讀

    SQL改寫消除相關(guān)子查詢實踐

    GaussDB (DWS) 根據(jù)子查詢SQL 語句中的位置把子查詢分成了子查詢、子鏈接兩形式。
    的頭像 發(fā)表于 12-27 09:51 ?354次閱讀

    直流屏系統(tǒng)的操作、查詢及異常處理方法

    直流屏系統(tǒng)的操作、查詢及異常處理方法
    的頭像 發(fā)表于 12-15 10:29 ?637次閱讀
    直流屏系統(tǒng)的操作、<b class='flag-5'>查詢</b>及異常處理<b class='flag-5'>方法</b>

    MySQL執(zhí)行過程:如何進行sql 優(yōu)化

    (1)客戶端發(fā)送一條查詢語句到服務(wù)器; (2)服務(wù)器先查詢緩存,如果命中緩存,則立即返回存儲在緩存中的數(shù)據(jù); (3)未命中緩存后,MySQL 通過關(guān)鍵字將 SQL 語句進行解析,并
    的頭像 發(fā)表于 12-12 10:19 ?334次閱讀
    MySQL執(zhí)行過程:如何進行<b class='flag-5'>sql</b> 優(yōu)化

    oracle執(zhí)行sql查詢語句的步驟是什么

    Oracle數(shù)據(jù)庫是一常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有強大的SQL查詢功能。Oracle執(zhí)行SQL查詢語句的步驟包括編寫
    的頭像 發(fā)表于 12-06 10:49 ?775次閱讀

    oracle sql 定義變量并賦值

    賦值可以通過使用PL/SQL語句塊或使用SQL*Plus工具來實現(xiàn)。下面將詳細介紹這兩種方法以及它們的具體用法。 使用PL/SQL語句塊定義和賦值變量: 在Oracle
    的頭像 發(fā)表于 12-06 10:46 ?2071次閱讀

    sql關(guān)聯(lián)查詢中的主表和從表

    SQL關(guān)聯(lián)查詢是數(shù)據(jù)庫中非常重要的一項操作,用于聯(lián)合多個表中的數(shù)據(jù),并根據(jù)指定的條件進行篩選和整合,從而得到更加豐富和準確的結(jié)果集。在關(guān)聯(lián)查詢中,主表和從表起著不同的作用,通過合理的關(guān)聯(lián)方式和條件
    的頭像 發(fā)表于 11-23 11:41 ?1084次閱讀

    sql where條件的執(zhí)行順序

    。 在深入討論WHERE條件的執(zhí)行順序之前,先回顧一下一般SQL語句的執(zhí)行順序。一條SQL語句的執(zhí)行通??梢苑譃橐韵聨讉€步驟:解析器分析語法、語義校驗、查詢優(yōu)化器生成執(zhí)行計劃、執(zhí)行計劃
    的頭像 發(fā)表于 11-23 11:31 ?1865次閱讀

    sql語句where條件查詢

    SQL是一用于管理和操作關(guān)系型數(shù)據(jù)庫的編程語言。其中,WHERE子句是用于過濾查詢結(jié)果的重要部分。通過WHERE條件,我們可以指定一系列條件,以僅返回滿足條件的記錄。本文將探討WHERE條件
    的頭像 發(fā)表于 11-23 11:28 ?924次閱讀

    Redis的分頁+多條件模糊查詢組合實現(xiàn)方案

    Redis是key-value類型的內(nèi)存數(shù)據(jù)庫,通過key直接取數(shù)據(jù)雖然很方便,但是并未提供像mysql那樣方便的sql條件查詢支持。因此我們需要借助Redis提供的結(jié)構(gòu)和功能去自己實現(xiàn)模糊條件查詢功能。
    的頭像 發(fā)表于 11-20 14:26 ?748次閱讀
    Redis的分頁+多條件模糊<b class='flag-5'>查詢</b>組合實現(xiàn)方案

    sql查詢語句大全及實例

    SQL(Structured Query Language)是一專門用于數(shù)據(jù)庫管理系統(tǒng)的標準交互式數(shù)據(jù)庫查詢語言。它被廣泛應(yīng)用于數(shù)據(jù)庫管理和數(shù)據(jù)操作領(lǐng)域。在本文中,我們將為您詳細介紹SQL
    的頭像 發(fā)表于 11-17 15:06 ?1161次閱讀

    多線程并發(fā)查詢oracle數(shù)據(jù)庫

    數(shù)據(jù)庫的原理、使用場景、實現(xiàn)方法以及可能遇到的問題和解決方案。 一、多線程并發(fā)查詢的原理 在傳統(tǒng)的單線程查詢方式中,當一個查詢請求發(fā)起時,數(shù)據(jù)庫會按照順序執(zhí)行
    的頭像 發(fā)表于 11-17 14:22 ?3101次閱讀

    sql是什么意思網(wǎng)絡(luò)用語

    sql是什么意思?sql是結(jié)構(gòu)化查詢語言(Structured Query Language)的縮寫。它是一專門用于管理關(guān)系型數(shù)據(jù)庫系統(tǒng)的編程語言。
    的頭像 發(fā)表于 10-13 17:31 ?3100次閱讀