Django 学习第七天——Django模型基础第二节
User 是自己创建的模型类,等于数据库中的表
常用的查询方法:
all():获取所有数据: User.objects.all()
first():获取第一条数据: User.objects.first()
last():获取最后一条数据: User.objects.last()
filter():根据参数提供的条件获取过滤后的记录:User.object.filter(id=1)
User.objects.filter(id=1,age=18) # 多个条件相当于sql语句的and连接
exclude():排除条件的所有数据: User.objects.exclude(name=‘lalala’)
get():获取一条数据: User.objects.get(id=1)
注:只能获取一条,多余一条报错
order_by():对结果排序(顺序): User.objects.order_by(‘age’)
多项排序: User.objects.order_by(‘age’,’id’)
逆向排序: User.objects.order_by(‘-age’) # 逆向排序就是条件前面加上个负号
values():返回 QuerySet ,字典列表:User.objects.all().values()
查询表中所有的name 以字典列表返回:User.objects.values(‘name’)
only():返回QuerySet,对象列表,一定包含主键字段:User.objects.only(‘name’)
defer():返回QuerySet,对象列表,作用和 only() 相反,查询出除了给定条件的所有字段数据:User.objects.defer(‘sex’)
count():获取当前查询到的数据的总数:User.objects.all().count()
常用的查询条件:
切片和python列表切片用法相似,不支持负索引,数据量大时不用步长
切片后,不在支持附加过滤条件与排序
User.objects.all()[2:5] # 获取2~5条数据
exact:相当于等于号
User.objects.filter(name__exact=’lalala’) # 查出 name = ’lalala‘ 的数据
iexact:跟exact一样,只是忽略大小写的匹配
contains:包含
User.objects.filter(name__contains=’lala’) # 包含 lala 的都匹配出来
icontains:跟contains一样,唯一不同的是忽略大小写
startswith:以什么开始
User.objects.filter(name__startswith=’la’) # 查询 name 字段以 la 开始的数据
istartswith:同startswith ,只是忽略大小写
endswith:以什么结尾,同startswith
iendswith:以什么结尾,忽略大小写,同istartswith
in:成员所属:
User.objects.filter(age__in=[18,19,20]) # 查询出age=18,19,20的所有数据
gt:大于:
User.objects.filter(age__gt=20) # 查询出age 大于 20的所有数据
gte:大于等于
User.objects.filter(age__gte=20) # 查询出age 大于等于 20的所有数据
lt:小于
User.objects.filter(age__lt=20) # 查询出age 小于 20的所有数据
lte:小于等于
User.objects.filter(age__lte=20) # 查询出age 小于等于 20的所有数据
range:区间
User.objects.filter(age__range=(18,30)) # 查询出 age 在18 到 30 的所有数据
isnull:判断是否为空
User.objects.filter(name__isnull=True)
使用 sql 中的 or 条件查询时:
1、先导包
from django.db.models import Q
2、使用:
User.objects.filter(Q(age=0) | Q(age=1)) # 查询出 age=0 或 age=1的所有数据
查找对象的条件的意思是传给以上方法的一些参数;相当于是SQL语句中的where语句后面的条件,语法为字段名__(两个下划线)规则
聚合函数:
导包:
from django.db.models import Count,Avg,Max,Min,Sum
Count:统计
Avg:平均值
Max:最大值
Min:最小值
Sum:求和
通过 queryset 的 aggregate 方法使用:
返回字典格式;age_avg是自定义的键
分组:
结合 Values,annotate 和聚合函数一起使用
annotate