def sel_stu(request):
# 查询数据
# filter()
# all()以列表的形式返回数据
stus = Student.objects.filter(s_name='小笛').all()
stu = stus.first()
print(stu)
##############
stu = Student.objects.filter(s_name='小笛').first()
print(stu)
# get(条件)
# 1.条件必须成立否则报DoseNotExist
# 2.条件查询的结果必须唯一,否则也会报错
# stu = Student.objects.get(id=4) # 报错,没有id=4的数据
# stu = Student.objects.get(s_age=18) # 报错,返回结果多余一条
stu = Student.objects.filter(s_age=16).first()
print(stu)
# exclude(查询条件) 过滤满足条件的数据
stus = Student.objects.exclude(s_name='小笛').all()
print(stus)
# exists(查询条件):判断查询条件是否有值,有值则返回True,反之返回False
stus = Student.objects.filter(s_age=50).exists()
print(stus)
## 可以等同于以下 ##
stus = Student.objects.filter(s_age=50).all()
if len(stus):
print(True)
else:
print(False)
# count():计算满足条件的结果的条数
stus_count = Student.objects.filter(s_age=18).all().count()
print(stus_count)
# value():获取指定列的值
stus = Student.objects.all().values('id', 's_name')
print(stus)
# order_by():排序,“-”(减号)表示降序
stus = Student.objects.all().order_by("-id")
print(stus)
# 模糊查询,contains
# sqlalchemy:filter(模型.s_name.__contains(值))
# Django orm: filter(s_name__contains='小') 表示包含'小'的值
# s_name__startswith='小' 表示以'小'开头的值
# s_name__endswith='小' 表示以'小'结束的值
stus = Student.objects.filter(s_name__contains='小').all()
print(stus)
stus = Student.objects.filter(s_name__startswith='小').all()
print(stus)
stus = Student.objects.filter(s_name__endswith='小').all()
print(stus)
# 大于 gt 大于等于 gte 小于 lt 小于等于 lte
# 在Django中,查询不能直接使用: > >= < <=
stus = Student.objects.filter(s_age__gt=17).all()
print(stus)
# sqlalchemy: in_([ ])
# django orm: 字段__in
# 表示id在[1, 2]这个列表中的数据
stus = Student.objects.filter(id_in = [1, 2]).all()
# 结合exclude使用,表示id不在[1, 2]这个列表中的数据,**注意:在Django中没有notin**
stus = Student.objects.exclude(id__in = [1, 2]).all()
print(stus)
# pk即primary_key,主键的意思
stus = Student.objects.exclude(pk__in = [1, 2]).all()
print(stus)
# 聚合函数 aggregate()
# select avg(s_age) from student;
stus = Student.objects.all().aggregate(Avg('s_age'))
print(stus)
# 要查询最大值,把Avg改成Max,再导个Max包即可,Min、Sum等,用法一样
# 过滤语文大于数学的成绩的学生信息
# sql:select * from student where yuwen > math
stus = Student.objects.filter(yuwen__gt=F('math')).all()
print(stus)
# sql:select * from student where yuwen < math - 20
stus = Student.objects.filter(yuwen__lt=F('math') - 20).all()
print(stus)
# 且
stus = Student.objects.filter(s_name__contains='小',
s_age__gt=18).all()
print(stus)
stus = Student.objects.filter(s_name__contains='小').\
filter(s_age__gt=18).all()
print(stus)
# 或 Q() /
stus = Student.objects.filter(Q(s_name__contains='小')
|
Q(s_age__lt=19)).all()
print(stus)
# 非[^] ~
stu = Student.objects.filter(s_age__gt=18).all()
stu = Student.objects.exclude(s_age__lte=18).all()
stu = Student.objects.filter(~Q(s_age__lt=18)).all()
return HttpResponse('查询数据成功')
django查询操作
最新推荐文章于 2022-05-17 23:19:54 发布