Django为我们提供了一套与数据库交互的机制,让我们能够更便捷的对数据库进行增删改查。Django 对数据库的操作依赖于它的 ORM 系统,Django ORM 主要包括Manager、QuerySet、Model三个模块,下面将对QuerySet进行概述总结,方便在需要使用时然而又刚好忘记了的时候能够有地可查。
QuerySet
QuerySet 从名字就很好理解,表示对数据库进行查询的结果的集合。QuerySet是可迭代的,其包含一个或多个model instances,并且可构造、过滤、切片、遍历等。
一、特性
1)延迟加载,符合筛选条件的对象被用到时才进行数据库查询;
2)缓存机制,查询数据库后的数据将缓存到内存中,当再次使用时不会再进行数据库查询,可使用all()方法对有修改的查询集进行更新
3)可下标遍历及切片,下标无负数,注意与python切片的区别;
4)对未进行求值的QuerySet进行运算,可能的返回值:QuerySet 、ValueQuerySet、ValueListQuerySet、Model,此时不进行数据库查询,反之。
5)通过当前表查询获取关联表记录时需使用select_related()或prefech_related()函数,下面有详细解释;
6)返回值为QuerySet的方法可叠加使用。
二、QuerySet操作
1)对查询集加步长(step)切片;
Blog.objects.all()[0:20:2] # 步长为2
2)序列化(Pickling);
3)对查询集进行遍历;
blog = Blog.objects.all()
for temple in blog:
print(temple.headline)
4)repr(),将对象转化为字符串,同python str()函数
5)len(), 求QuerySet元素的数量,推荐使用QuerySet.conunt();
6)list(), 将QuerySet转为list;
7)bool(), 判断查询集是否为空,推荐使用QuerySet.exists();
注:在QuerySet没有缓存的情况下,以上操作会导致数据库查询。
三、QuerySet 的方法