知识点3"/>
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)
个人博客最新博文分享
更多推荐
django开发知识点3
发布评论