django中queryset的兩大特性

roles = RoleInfo.objects.all()

一、查詢集的惰性執行


        創建查詢集的時候,是不會訪問數據庫的,直到真正的調用數據的時候,纔會訪問數據庫,所以 roles = RoleInfo.objects.all(),沒有真正的進行數據庫查詢的,只是創建了一個數據庫查詢集

調用數據,真正的使用數據:
1、迭代
2、序列化
3、與if合用

 

序列化與反序列化

序列化:將Python數據類型轉化成json字符串

反序列化:將json字符串轉化成Python數據類型

 

二、查詢緩存機制

 

[obj.name for obj in RoleInfo.objects.all()]

[obj.name for obj in RoleInfo.objects.all()]

當前狀態下,兩次在進行列表推導式的過程中,分別對查詢集進行了連接數據庫的查詢操作,兩次都連接了數據庫,但是兩次的查詢結果是一致的,增加了數據庫的負載,每一次都對數據庫進行了交互。

Django的查詢集會有緩存機制,當第一次真正連接數據庫查詢的時候,會將結果進行緩存,每一次使用查詢結果的時候,就可以重用查詢集,減少了交互

案例:

role_set = RoleInfo.objects.all()
[obj.name for obj in role_set]
[obj.name for obj in role_set]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章