Django-ORM---查詢集介紹
查詢集 QuerySet
1 概念
Django的ORM中存在查詢集的概念。
查詢集,也稱查詢結果集、QuerySet,表示從資料庫中獲取的物件集合。
當呼叫如下過濾器方法時,Django會返回查詢集(而不是簡單的列表):
- all():返回所有資料。
- filter():返回滿足條件的資料。
- exclude():返回滿足條件之外的資料。
- order_by():對結果進行排序。
對查詢集可以再次呼叫過濾器進行過濾,如
BookInfo.objects.filter(bread__gt=30).order_by('bpub_date')
也就意味著查詢集可以含有零個、一個或多個過濾器。過濾器基於所給的引數限制查詢的結果。
從SQL的角度講,查詢集與select語句等價,過濾器像where、limit、order by子句。
判斷某一個查詢集中是否有資料:
- exists():判斷查詢集中是否有資料,如果有則返回True,沒有則返回False。
2 兩大特性
1)惰性執行
建立查詢集不會訪問資料庫,直到呼叫資料時,才會訪問資料庫,呼叫資料的情況包括迭代、序列化、與if合用
例如,當執行如下語句時,並未進行資料庫查詢,只是建立了一個查詢集qs
qs = BookInfo.objects.all()
繼續執行遍歷迭代操作後,才真正的進行了資料庫的查詢
for book in qs:
print(book.btitle)
2)快取
使用同一個查詢集,第一次使用時會發生資料庫的查詢,然後Django會把結果快取下來,再次使用這個查詢集時會使用快取的資料,減少了資料庫的查詢次數。
情況一:如下是兩個查詢集,無法重用快取,每次查詢都會與資料庫進行一次互動,增加了資料庫的負載。
from booktest.models import BookInfo
[book.id for book in BookInfo.objects.all()]
[book.id for book in BookInfo.objects.all()]
情況二:經過儲存後,可以重用查詢集,第二次使用快取中的資料。
qs=BookInfo.objects.all()
[book.id for book in qs]
[book.id for book in qs]
3 限制查詢集
可以對查詢集進行取下標或切片操作,等同於sql中的limit和offset子句。
注意:不支援負數索引。
對查詢集進行切片後返回一個新的查詢集,不會立即執行查詢。
如果獲取一個物件,直接使用[0],等同於[0:1].get(),但是如果沒有資料,[0]引發IndexError異常,[0:1].get()如果沒有資料引發DoesNotExist異常。
示例:獲取第1、2項,執行檢視。
qs = BookInfo.objects.all()[0:2]
相關文章
- 原創:oracle 子查詢介紹Oracle
- 「Oracle」Oracle高階查詢介紹Oracle
- Sql介紹 與 Sql基礎查詢SQL
- MySQL執行狀況查詢方式介紹MySql
- 從根上理解elasticsearch(lucene)查詢原理(1)-lucece查詢邏輯介紹Elasticsearch
- Django 2.0 模型層中 QuerySet 查詢操作介紹Django模型
- 電腦序列號怎麼查詢 電腦序列號的查詢方法介紹
- vim 的模糊查詢外掛 LeaderF 新功能介紹
- 介紹使用WordPress時10個常用的MySQL查詢MySql
- mysql模糊查詢like與REGEXP的使用詳細介紹MySql
- elasticsearch查詢之大資料集分頁查詢Elasticsearch大資料
- 如何調優 Oracle SQL系列文章:查詢優化器介紹OracleSQL優化
- 網站查詢漏洞滲透測試大體流程介紹網站
- 查詢GBase XDM Cluster的客戶端示例程式介紹客戶端
- MNIST資料集介紹
- nuPlan資料集介紹
- Cora 資料集介紹
- mysql查詢語句集MySql
- win10電腦怎麼查詢mac地址 win10系統mac地址查詢方法介紹Win10Mac
- MySQL入門系列:查詢簡介(五)之子查詢MySql
- LangChain SQL介紹以及使用Qwen1.5執行SQL查詢教程LangChainSQL
- Newlife.XCode的查詢與資料初始化功能介紹XCode
- ClickHouse 邏輯叢集介紹
- Redis 漸進叢集介紹Redis
- es筆記三之term,match,match_phrase 等查詢方法介紹筆記
- MySQL入門系列:查詢簡介(七)之組合查詢MySql
- 備忘:laravel 對查詢結果集可以迴圈where查詢Laravel
- 電腦mac地址在哪看 win7win10mac地址查詢方法介紹MacWin7Win10
- Redis叢集介紹及測試思路Redis
- TiDB 查詢優化及調優系列(二)TiDB 查詢計劃簡介TiDB優化
- MySQL入門系列:查詢簡介(二)MySql
- Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢PythonDjango框架資料庫函式
- solr叢集構建的基本流程介紹Solr
- VictoriaMetrics 中文教程(10)叢集版介紹
- 第76篇 Redis叢集詳細介紹Redis
- jinq 入門介紹-java中編寫資料庫查詢的簡單自然的方式Java資料庫
- PostgreSQL函式:返回表查詢結果集SQL函式
- Mybatis 查詢語句結果集總結MyBatis