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]