Django 基础之QuerySet

目录

一:QuerySet的概念

二:常见的QuerySet接口

(1):支持链式调用的接口

(2):不支持链式调用的接口

官网资料

一:QuerySet的概念

QuerySets :在Model 的基础上怎么查看数据,有哪些接口可以用(比如all 和filter等), 以及如何更进一步进行定制。毕竟ORM 在查询上会有一些限制,但是在这-部分中你可以找到如何自定义查询。

Django 还提供了原生SQL 的接口Post.objects.raw('SELECT* FROM blog_post ’ ),它除了可以解决Query Set 无法满足查询的情况外,还可以提高执行效率。不过,我们需要严格把控使用场景,因为过多地使用原生SQL 会提高维护成本。

二:常见的QuerySet接口

这里我根据是否支持链式调用分类

(1):支持链式调用的接口

支持链式调用的接口eri 返回Query Set 的接口,具体如下。

  • all 接口。相当于SELECT * FROM table name 语句,用于查询所有数据。
  • filter 接口。顾名思义,根据条件过滤数据,常用的条件基本上是字段等于、不等于、大于、小于。当然,还有其他的,比如能改成产生LIKE 查询的: Model.obects.filter(content_contains = ” 条件” ) 。
  • exclude 接口。同filter ,只是相反的逻辑。
  • reverse 接口。把QuerySet 中的结果倒序排列。’
  • distinct 接口。用来进行去重查询, 产生SELECT DISTINCT 这样的SQL 查询。
  • none 接口。返回空的QuerySet 。

(2):不支持链式调用的接口

不支持链式调用的接口即返回值不是Query Set 的接口, 具体如下。

  • get 接口。比如Post.objects . get(id=l ) 用于查询id 为l 的文章: 如果存在, 则直接返回对应的Post 实例;如果不存在, 则抛出DoesNotEx 工st 异常。
  • create 接口。用来直接创建一个Model 对象, 比如post = Post.objects.create(title=”一起学习篮球吧” ) 。
  • get_or_create 接口。根据条件查找, 如果没查找到, 就调用create 创建。
  • update_or_create 接口。同get _or_create ,只是用来做更新操作。
  • count 接口。用于返回QuerySet 有多少条记录, 相当于SELECT COUNT ( * ) FROM table_narne 。
  • latest 接口。用于返回最新的一条记录, 但是需要在Model 的Meta 中定义: get_latest_by = <用来排序的字段〉。
  • earliest 接口。同上,返回最早的一条记录。
  • first 接口。从当前QuerySet 记录中获取第一条。
  • last 接口。同上,获取最后一条。
  • exists 接口。返回True 或者False ,在数据库层面执行SELECT (1 ) AS ” a ” FROMtable_ narne LIMIT 1 的查询,如果只是需要判断Query Set 是否有数据,用这个接口是最合适的方式。不要用count 或者len(queryset )这样的操作来判断是否存在。相反, 如果可以预期接下来会用到QuerySet 中的数据,可以考虑使用l en(queryset)的方式来做判断,这样可以减少一次DB 查询请求。
  • bulk_create 接口。同create ,用来批量创建记录。
  • in_bulk 接口。批量查询, 接收两个参数id_list 和f i led_narne 。可以通过Post.ob]ects.in_bulk ( [ 1, 2 , 3] )查询出id 为1 、2 、3 的数据,返回结果是字典类型,字典类型的key 为查询条件。返回结果示例: { l : <Post 实伽1> , 2 : <Post实例2> , 3 : <Post 实例 3> } 。
  • update 接口。用来根据条件批量更新记录,比如: Post.objects.filter(owner_narne =’ Bruce ’ ).update(title=’ 测试更新’)
  • delete 接口。同update ,这个接口是用来根据条件批量删除记录。
  • values 接口。当我们明确知道只需要返回某个字段的值,不需要Model 实例时.
  • values_list 接口。同values ,但是直接返回的是包含tuple 的QuerySet 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django中,QuerySet和Object是两个不同的概念。 1. QuerySet QuerySetDjango中的一个概念,它表示数据库操作的结果集合。QuerySet可以像列表一样进行迭代、切片等操作,但是它并不是真正的列表。当你执行一个查询操作时,Django会返回一个QuerySet对象,这个对象包含了一些查询结果的方法。这些方法可以用来进行进一步的过滤、排序、切片等操作。QuerySet是惰性的,这意味着它只有在需要的时候才会执行查询,这有助于提高性能。 例如,以下代码创建了一个QuerySet对象,它包含了所有年龄大于18岁的用户: ``` from django.contrib.auth.models import User users = User.objects.filter(age__gt=18) ``` 2. Object Object指的是Django模型中的一个实例。一个模型是一个数据库表的抽象,它定义了表的结构和字段,每个实例则代表了表中的一行数据。你可以使用ORM API来创建、更新、删除和查询模型实例。 例如,以下代码创建了一个User模型的实例: ``` from django.contrib.auth.models import User user = User.objects.create(username='john') user.first_name = 'John' user.last_name = 'Doe' user.save() ``` 在这个例子中,我们首先创建了一个User实例,然后通过修改它的属性来更新它,最后使用save()方法将更改保存到数据库中。 总结 QuerySet和Object是Django中的两个不同的概念,它们分别代表了数据库操作的结果集合和模型中的一个实例。QuerySet是一个惰性的对象,它包含了一些查询结果的方法,可以用来进行进一步的过滤、排序、切片等操作。Object则代表了一个模型实例,你可以使用ORM API来创建、更新、删除和查询它。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值