Django条件查询

本文详细介绍了Django中的查询操作,包括queryset的exclude、order_by、条件查询、F对象和Q对象的使用,以及聚合函数如count在统计和聚合数据上的应用。同时,讨论了查询集的特性,如惰性查询、缓存和限制查询结果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询函数

函数名功能返回值说明
get返回表中满足条件的一条且只能有一条数据。返回值是一个模型类对象。参数中写查询条件。
1. 如果查到多条数据,则抛异常MultipleObjectsReturned
2.查询不到数据,则抛异常:
DoesNotExist
all返回模型类对应表格中的所有数据。返回值是QuerySet类型查询集
filter返回满足条件的数据。返回值是QuerySet类型参数写查询条件。
exclude返回不满足条件的数据。返回值是QuerySet类型参数写查询条件。
order_by对查询结果进行排序。返回值是QuerySet类型参数中写根据哪些字段进行排序。

注:对于QuerySet类型,可以继续使用以上函数。

exclude

在这里插入图片描述

order_by

  1. 按照 id 升序排序
    在这里插入图片描述
  2. 按照 id 降序排序
    在这里插入图片描述
  3. id>3,按阅读量降序排序
    在这里插入图片描述

条件查询

  • 条件格式:模型类属性名__条件名=值
  • 数据表数据
    在这里插入图片描述

判等 条件名: exact

在这里插入图片描述

模糊查询

  1. 包含 contains
    在这里插入图片描述
  2. 以什么结尾 endswith
    在这里插入图片描述
  3. 以什么结尾 startswith
    在这里插入图片描述

空查询 isnull

在这里插入图片描述

范围查询 in

在这里插入图片描述

比较查询 gt、lt、gte大于等于、lte小于等于

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

日期查询 year、month、day

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

日期大于

在这里插入图片描述

F对象

  • 作用:用于类属性之间的比较
  • 使用之前需要导入:
    from django.db.models import F
    
  • 查询阅读量大于评论量
    BookInfo.objects.filter(bread__gt=F('bcomment'))
    
  • 查询阅读量大于2倍评论量图书信息
     BookInfo.objects.filter(bread__gt=F('bcomment')*2)
    

Q对象

  • 作用:用于查询时条件之间的逻辑关系。not and or,可以对Q对象进行 & | ~ 操作。
  • 使用之前需要:
    from django.db.models import Q
    
  • 查询 id 小于3且阅读量大于30
    BookInfo.objects.filter(id__lt=3,bread__gt=30)
    
  • 查询 id 小于3或者阅读量大于30
    from django.db.models import Q
    BookInfo.objects.filter(Q(id__lt=3)|Q(bread__gt=30))
    
  • 查询 id 不等于 3
    BookInfo.objects.filter(~Q(id=3))
    

聚合函数

  • 作用:对查询结果进行聚合操作(sum、count、avg、max、min)
    aggregate:调用这个函数来使用聚合。
  • 聚合之后的 key:字段__聚合函数名称
  • 使用前需要先导入聚合类
    from django.db.models import Sum,Count,Max,Min,Avg
    
  • 查询所有书的数据目(直接写 *会报错)
    from django.db.models import Count
    BookInfo.objects.all().aggregate(Count('id'))
    
    在这里插入图片描述
  • 查询所有图书阅读量的总和
    from django.db.models import Sum
    BookInfo.objects.all().aggregate(Sum('bread'))
    
    在这里插入图片描述

count函数 返回值是一个数字

  • 作用:统计满足条件数据的数目
  • 统计所有图书数目
    BookInfo.objects.all().count()
    
  • 统计 id 大于 3 所有图书数目
     BookInfo.objects.filter(id__gt=3).count()
    

查询集

  • all、filter、exclude、order_by调用这些函数会产生一个查询集;
    QuerySet类对象可以继续调用所有函数
  • 查询集特征
    1. 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库真正的查询。
    2. 缓存:当使用的是同一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个数据集时,使用的事缓存中的结果。
  • 限制查询集:可以对一个查询集取下标或者切片操作来限制查询集的结果。
    对一个查询集进行切片操作会产生一个新的查询集,下标不允许为负数。
    取出查询集第一条数据的两种方式:
方式说明
b[0]如果b[0]不存在,会抛出IndexError异常
b[0:1].get()如果b[0:1].get()不存在,会抛出DoesNotExist异常。

exists:判断一个查询集中是否有数据。True False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值