# 模型查询***************************************************************************************
# 查询集 表示从数据库里获取的对象集合
# 查询集可以有多个过滤器 过滤器就是一个函数 基于我们的参数限制查询结果
# 从sql角度来说 查询集会被映射成select语句 就像where条件
# 1.在管理器上的方法调用查询集
# 2.查询集经过过滤器筛选后返回查询集 所以可以写成链式调用
# 3.惰性执行 创建查询集不会创建数据库的访问 直到调用数据的时候才会访问数据
# 4.直接访问数据的情况也有
# 4.1.迭代
# 4.2.序列化
# 4.3.与if合用
# 5.过滤器 返回查询集的方法称为过滤器
# 5.1. all()
# 5.2. filter(键 值 键 值) filter(键 值).filter(键 值)
# 5.3. exclude()过滤掉符合条件的数据 不常用
# 5.4. order_by()排序 不常用
# 5.5. values()一条数据就是一个字典 返回一个列表 和all()的区别在于返回的数据类似于json的列表
# 5.6. 返回的单个数据
# 5.6.1. get()返回一个满足条件的对象
# 如果没有找到符合条件的对象 会引发一个DoesNotExist异常
# 如果找到多个对象 会引发MultipleObjectReturned异常
# 异常用try except捕获屏蔽
# 5.6.2. count()返回查询集对象个数
# 5.6.3. first()返回查询集第一个对象
# 5.6.4. last()返回最后一个数据
# 5.6.5. exists()判断查询集中是否有数据 True False
# 6. 限制查询集[n,m] 相当于limit start,count 的SQL语句
# 7. 查询集缓存 每个查询集都会包含一个缓存用来最小化数据库访问
# 第一次查询后Django会形成缓存
# 8. 字段查询 实现了sql中的where语句 作为方法filter(),exclude(),get()的参数
# 语法 属性名称__比较运算符 值
# 外键 属性名_id
# 转义 like语句中的%是为了匹配占位
# 8.1. exact 判断 大小写敏感 通常用 就可以了
# 8.2. contains 是否包含 写法根据语法规则为 sname__contains sun
# 8.3. startswith、endswith 以某某开头或结尾
# 以上4种参数如果在参数前多一个‘i’就大小写不敏感 iexact,icontains,istartwith,iendswith
# 8.4. isnull,isnotnull是否为空
# 8.5. in 包含 写法 pk__in [2.4.6.8]
# 8.6. gt大于 gte大于等于 lt小于 lte小于等于
# 8.7. 日期的几个 year,month,day,week_day,hour,minute,second,写法 lastTime__year 2017
# 8.8. 跨关联查询 处理join查询
# 语法 模型类名__属性名__比较运算符
# 8.9. 查询快键 pk 主键
# 9. 聚合函数
# 9.1. aggregate()函数返回聚合函数的值 Students.objects.aggregate(Max( sage )) # 与下面几个配合使用
# 9.2. Avg()
# 9.3. Max()
# 9.4. Min()
# 9.5. Count()
# 9.6. Sum()
# 10. F对象
# 可以使用模型的A属性和B属性进行比较
from django.db.models import F,Q
def grades(request):
g Grades.objects.filter(ggirlnum__gt F( gboynum ))
print(g)
return HttpResponse( ahsgdfjhagsf )
# 并且支持F对象的算术处理 F( 字段 ) 20
# 11. Q对象
# 如果要使用or查询 需要使用Q对象 一般的过滤器方法中的关键字参数为And模式
stuList Students.objects.filter(Q(pk__lt 3) | Q(sage__gt 50))
# Q对象前的~为取反 写法~Q(sage__lt 20)
# 如果只有一个对象 就是用于匹配的 跟没有Q是等效的
有用的话点个赞吧 是吧