查询集(QuerySet)
all,filter,exclude,order_by调用这些函数会产生一个查询集
QuerySet类对象可以继续调用上面所有函数
-
查询集特性
- 惰性: 所有的查询只有在真正用到该数据的时候才会真正的进行查询。否则不会进行真正的查询
- 缓存: 如果两次使用查询集相同的话,第二次使用的查询集会直接使用第一次查询完成后缓存的结果,不会进行真正的第二次查询
-
限制查询集
如果一个查询集的结果很多,而不是每一个对象都是想要的话,可以使用下标或切片的方法进行限制查询集的查询。对一个查询集进行切片后会产生一个新的查询集
切片的下标不允许为负数
-
取出查询集数据的方法
Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> from bookimfor.models import Book >>> ids = Book.objects.filter(book_id__gte=1) >>> id = ids[0:3] >>> type(id) <class 'django.db.models.query.QuerySet'> >>> id[0] <Book: Book object (1)> >>>
直接当列表进行使用就行。按照序号进行提取
注意:
- b[0]如果不存在,会报出索引异常(IndexError)
- b[0:3].get()如果不存在,会爆出DoesNotExist
- 可以用exists函数判断查询集中是否有数据
True表示有数据id.exists() True >>> id=ids[0:0] >>> id.exists() False >>>
False表示没有数据