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]