django查询操作

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('查询数据成功')

相关文章: