Django中的QuerySet

本文详细介绍了Django中QuerySet的概念及其使用方法。包括如何利用QuerySet进行数据查询、过滤等操作,以及支持和不支持链式调用的接口区别。

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

Django中的QuerySet

在Django的Model中,QuerySet是一个很重要的概念。对数据库的所有查询以及更新交互都是通过QuerySet来完成的。Django从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。

QuerySet定义:

class QuerySet(model=None, query=None, using=None)[source]

QuerySet类具有两个公有属性用于内省:

ordered:如果QuerySet是排好序的则为True,否则为False。

db:如果现在执行,则返回使用的数据库。

Django中的QuerySet本质上是一个懒加载的对象,在内部,创建、过滤、切片和传递一个QuerySet不会真实操作数据库,在对查询集提交之前,不会发生任何实际的数据库操作。

userinfo = UserInfo.objects.all()  # 返回一个QuerySet对象并赋值给userinfo

userinfo_id = userinfo.filter(id=1)  # 继续返回一个QuerySet对象并赋值给userinfo_id

print(userinfo_id)  # 此时会根据上边的两个条件执行数据查询操作,对应的SQL语句为:SELECT * FROM tablename where id =1;

QuerySet部分支持链式调用

支持链式调用的接口:

  • all接口: 用于查询所有数据
  • filter接口: 根据条件进行过滤
  • exclude接口: 同filter,只是相反的逻辑
  • reverse接口: 把Queryset中的结果倒序排列
  • distinct接口: 用来进行去重查询
  • none接口: 返回空的Queryset

不支持链式调用的接口:

  • get接口:用于查询,存在返回对应的实例,不存在,则抛出DoesNotExist异常
  • create接口:直接创建一个Model对象
  • get_or_create接口:根据条件查找,如果没有查找到,就调用create创建
  • update_or_create接口:同get_or_create,只是用来做更新操作
  • count接口:用于返回Queryset有多少条记录
  • latest接口:用于返回最新一条记录,但需要在Model的Meta中定义:get_latest_by = <用来排序的字段>
  • earliest接口:同上,返回最早的一条记录
  • first接口:从当前Queryset记录中获取第一条
  • last接口:同上,获取最后一条
  • exists接口:返回True或者False,只需要判断Queryset是否有数据用这个接口最合适
  • bulk_create接口:同create,用来批量创建记录
  • in_bulk接口:批量查询
  • update接口: 用来根据条件批量更新记录
  • delete接口: 同update,这个接口是用来根据条件批量删除记录。update和delete都会出发Django的signal
  • values接口:当我们明确知道只需要返回某个字段的值,不需要Model实例时,可以使用
  • values_list接口:同values,但直接返回的是包含tuple的Queryset

执行一个对象中的方法之后得到的结果还是这个对象,这样可以接着执行对象上面的其他方法,这就是链式调用。

data = UserInfo.objects.filter(id=1).filter(class_id=2).filter(name="xxx")

参考文章:
对QuerySet的理解
Django之QuerySet详解
Django中Queryset的使用(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值