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('查询数据成功')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值