Django模型查询
查询集的两个特性:
1.惰性执行
创建查询集不会带来任何数据库的访问,直到调用数据时,才会访问数据库
2.缓存
case1:构成了两个查询集,无法重用缓存,每次查询都会与数据库进行一次交互
print([e.attr for e in Entry.objects.all()])
print([e.attr for e in Entry.objects.all()])
case2:两次循环使用同一个查询集,第二次使用缓存中的数据
querylist=ExampleModel.objects.all()
print([e.attr for e in querylist])
print([e.attr for e in querylist])
case3:何时查询集不会被缓存
对整个查询集的子集进行求值时不会缓存
query=ExampleModel.objects.all()
for ... in query[0:10]
for ... in query[11:20]
字段查询
实现where子名,作为方法filter()、exclude()、get()的参数
语法:属性名称__比较运算符=值
举例:查询模型类中属性attr1包含1的对象
query_list = ExampleModel.objects.filter(attr1__contains=’1’)
比较运算符:
exact、contains、startswith、endswith、isnull、isnotnull、gt、gte、lt、lte、year、
month、day、week_day、hour、minute、second
注:跨关联查询(语法:模型类名__属性名__比较运算符)
聚合函数:
aggregate(Avg()/Count/Max/Min/Sum)
F对象和Q对象
1.通过构造F对象来比较模型中的两个列
举例:query_list = ExampleModel.objects.filter(attr1=F(‘attr2’))
2.通过构造Q对象来实现or查询
举例:query_list = ExampleModel.objects.filter(Q(pk__lt=6) | Q(attr__gt=1))