2018-11-28djenv表的查
模型查询
模型成员objects
Django默认通过模型的objects对象实现模型数据查询
过滤器
查询集表示从数据库获取的对象集合
查询集可以有多个过滤器
过滤器就是一个函数,基于所给的参数限制查询的结果
从SQL角度来说,查询集合和select语句等价,过滤器就像where条件
Django有两种过滤器用于筛选记录
filter : 返回符合筛选条件的数据集
exclude : 返回不符合筛选条件的数据集
多个filter和exclude可以连接在一起查询
当然还有如下这些过滤器:
查询单个数据
filter(条件): 查询满足条件的信息
exclude(条件): 过滤掉满足条件的信息 排除查询 查询到不满足条件的
get():返回一个满足条件的对象。如果没有返回符合条件的对象,会应该模型类DoesNotExist异常,如果找到多个,会引发模型类MultiObjectsReturned异常
first():返回查询集中的第一个对象-->获取结果中的第一个
last():返回查询集中的最后一个对象-->获取结果中的最后一个
count():返回当前查询集中的对象个数
exists():判断查询集中是否有数据,如果有数据返回True,没有返回False
order_by():排序 - :降序 升序就不写
values():获取对象的值
模糊查询
想让大小写不敏感就在前面加个i
contains --> 大小写敏感
icontains --> 大小写不敏感
__contains='小':名字是否包含小,大小写敏感--->类似like '%小%' -->只要有小的
__endswith='小':类似于like '%小' -->最后一个字是小的
__startswith='小':类似于like '小%' -->第一个字是小的
大于小于查询
大于:__gt大于等于:get
小于:__lt小于等于:lte
范围: in
主键: pk
聚合函数
agregate()函数返回聚合函数的值
Avg:平均值
Count:数量
Max:最大
Min:最小
Sum:求和
F对象/Q对象
F对象:可以使用模型的A属性与B属性进行比较
背景:在模型中有两个字段,分别表示学生成绩A与成绩B,要对成绩AB进行比较计算,就需要使用到F对象。
例如有如下例子1:
F对象支持算数运算
grades = Grade.objects.filter(girlnum__gt=F('boynum') + 10)
例子2:
Q对象:
Q()对象就是为了将过滤条件组合起来
当我们在查询的条件中需要组合条件时(例如两个条件“且”或者“或”)时。我们可以使用Q()查询对象
使用符号&或者|将多个Q()对象组合起来传递给filter(),exclude(),get()等函数
Q()对象的前面使用字符“~”来代表意义“非”
模型一对一
定义一对一: OneToOneField()
class A:
b1 = OneToOneField(B)
class B():
name = CharField()
正向查询,已知A对象a,查询B对象: a.b1
反向查询,已知B对象b,查询A对象: b.a