django开发知识点3-链式调用

1、支持链式调用的接口
all
使用频率比较高,相当于SELECT * FROM table 语句,用于查询所有数据。

filter

使用频率比较高,根据条件过滤数据,常用的条件基本上字段等于、不等于、大于、小于。当然,还有其他的,比如能修改成产生LIKE查询的:Model.objects.filter(content__contains="条件")。

exclude

与filter是相反的逻辑

reverse

将QuerySet中的结果倒叙排列

distinct

用来进行去重查询,产生SELECT DISTINCT这样的SQL查询

none

返回空的QuerySet

2、不支持链式调用的接口

get

比如Product.objects.get(id=1)用于查询id为1的文章:如果存在,则直接返回对应的Post实例;如果不存在,则抛出DoesNotExist异常。所以一般情况下,要使用异常捕获处理:

create

用来直接创建一个Model对象,比如product =Product.objects.create(title="一起学习")。

get_or_create

根据条件查找,如果没查找到,就调用create创建。

update_or_create

与get_or_create相同,只是用来做更新操作。

count

用于返回QuerySet有多少条记录,相当于SELECT COUNT(*) FROM table 。

latest

用于返回最新的一条记录,但要在Model的Meta中定义:get_latest_by= <用来排序的字段>。

earliest

同上,返回最早的一条记录。

first

从当前QuerySet记录中获取第一条。

last

同上,获取最后一条。

exists

返回True或者False,在数据库层面执行SELECT (1) AS "a" FROM table LIMIT 1的查询,如果只是需要判断QuerySet是否有数据,用这个接口是最合适的方式。

不要用count或者len(queryset)这样的操作来判断是否存在。相反,如果可以预期接下来会用到QuerySet中的数据,可以考虑使用len(queryset)的方式来做判断,这样可以减少一次DB查询请求。

bulk_create

同create,用来批量创建记录。

in_ bulk

批量查询,接收两个参数id list和filed name。可以通过Post.objects. in_ bulk([1, 2, 3])查询出id为1、2、3的数据,返回结果是字典类型,字典类型的key为查询条件。返回结果示例: {1: <Post 实例1>, 2: <Post实例2>,3:<Post实例3>}。

update

用来根据条件批量更新记录,比如: Product.objects.filter(owner__name='123').update(title='测试更新')。

delete

同update,这个接口是用来根据条件批量删除记录。需要注意的是,和delete都会触发Djiango的signal

values

当我们明确知道只需要返回某个字段的值,不需要Model实例时,用它,用法如下:

title_list = Product.objects.filter(category_id=1).values('title')

返回的结果包含dict的QuerySet,类似这样: <QuerySet [{'title' :xxx},]>

values_list

同values,但是直接返回的是包含tuple的QuerySet:

titles_list = Product.objects.filter(category=1).values_list('title')

返回结果类似: <QuerySet[("标题",)]>

如果只是一个字段的话,可以通过增加flat=True参数,便于我们后续 处理:

title_list = Product.objects.filter(category=1).values_list('title',flat=True)

for title in title__list:

print(title)

个人博客最新博文分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值