1.curd(增删改查)
对于数据库,作为一名开发人员并不会感到陌生,那么数据库中的查询集是怎么一回事呢?
2.数据库的查询集
查询集这个概念存在django框架中,存在于ORM(object relational mapping)对象关系映射。当调用以下的过滤方法时,将会返回一个查询结果集
- all():返回所有数据。
- filter():返回满足条件的数据。
- exclude():返回满足条件之外的数据。
- order_by():对结果进行排序
对查询集可以再次调用过滤器进行过滤,如:BookInfo.objects.filter(bread__gt=30).order_by('bpub_date')
查询过滤器在这里的存在就是一种拥有限制条件的筛选器,通过零个、一个或者多个过滤器来对相对于的数据进行相对应的筛选,从而获取所需的数据
从原生sql语句来说:从SQL的角度讲,查询集与select语句等价,过滤器像where、limit、order by子句
判断某一个查询集中是否有数据:exists():判断查询集中是否有数据,如果有则返回True,没有则返回False。
查询集的两大特性:
(1)惰性查询
当执行如下语句时,并未进行数据库查询,只是创建了一个查询集只有当执行的遍历迭代时,才算是查询了数据库。如只是建立了一个查询集qs = BookInfo.objects.all()
(2)缓存
当第一次查询数据库时,会把查询的结果缓存下来,之后再次调用时,就会直接从缓存中调用,从而减少查询数据库的次数。
减少查询数据库次数的好处?数据库一旦查询次数增加,那么负载就会过高,容易产生问题
可以对查询集进行切片和取下标等操作,等同于sql中的limit和offset子句。但是不支持负数索引操作,对查询集进行切片操作后,将会获得一个新的查询集,但是同理,也不会进行数据库的查询,仅仅是创建了一个查询集罢了。
如果获取一个对象,直接使用[0],等同于[0:1].get(),但是如果没有数据,[0]引发IndexError异常,[0:1].get()如果没有数据引发DoesNotExist异常。
示例:获取第1、2项,运行查看:qs = BookInfo.objects.all()[0:2]