djang中QuerySet的使用

一、了解QuerySet

	在Django的model中,QuerySet是一个重要的的概念,我们在同数据库的所用查询以及更新交互都是通过他来完成的。
	django算标准的MVC框架,虽然因为它的模板和View的概念被大家戏称为'MTV'的开发模式,但是道理都是一样的。Model作为MVC模式中的基础层(或数据层),负责整个系统提供数据,因此,我们要先理解它是如何提供数据的。
	在Model层中,django通过给model增加一个objects属性来提供数据操作接口,比如查询所有数据可以这么写:Post.objects.all(),这样就可以拿到QuerySet对象,这个对象中包含了我们需要的数据,当我们用到它时,它会去DB中获取数据。用代码来解释一下:
posts = Post.objects.all() #返回一个QuerySet对象并赋值给post
available_post = posts.filter(status=1)#继续返回一个QuerySet对象并赋值给available_posts
print(available_posts)#此时会根据上面两个条件执行数据库查询操作,对应的SQL语句为:
select * from blog_post where status = 1;
	django中的QuerySet本质上是一个懒加载的对象,上面两行代码执行后,都不会产生数据库查询,只会返回一个QuerySet对象,等你真正用他的时候才会执行查询。
	
	**

二、常用的QuerySet接口

**

	model层是如何通过QuerySet为上层提供给接口的大的呢?比如上一段用到了Post.objects.filter(status=1)里面的filter,除了这些还有:
	1、支持链式调用的接口:
	all接口:相当于select * from table_name 语句,用于查询所有数据
	filter接口:根据条件过滤数据,常用的条件基本上是字段等于,不等于,大于,小于,当然还有其他的,比如能改成like查询的:model.object.filter(content_contains = '条件')
	exclude接口:同filter,只是相反的逻辑
	reverse接口:把QuerySet中的结果倒序排列
	distinct接口:用来进行去重查询,产生select distinct 这样的查询语句
	none接口:返回空的QuerySet
	2、不支持链式调用的接口(不支持链式调用的接口即返回值)
	get接口:比如Post.objects.get(id=1)用于查询id为1的数据:如果存在,则直接返回Post对应的实例;如果不存在则抛出DoesNot Exist异常,所以一般都这么用:
try:
	post = Post.objects.get(id=1)
except Post.DoseNot Exist:
#做异常处理
get_or_create接口:根据条件查找,如果没找到,就调用create创建
update_or_create接口:同get_or_create接口,只是用来做更新操作
count接口:用于返回QuerySet有多少条记录,相当于select count(*) from table_name
latest接口:用于返回最新的一条记录,但是需要在Model中的Meta中定义:get_latest_by =<用来排序的字段>。
earliets接口:同上返回最早的一条记录
first接口:从当前QuerySet记录中获取第一条。
last接口:同上获取最后一条
exists接口:返回True或者False,在数据库层面
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值