Entry.objects.filter() 或 Entry.objects.get() 如何工作?

Posted

技术标签:

【中文标题】Entry.objects.filter() 或 Entry.objects.get() 如何工作?【英文标题】:How Entry.objects.filter() or Entry.objects.get() works? 【发布时间】:2018-09-25 11:02:01 【问题描述】:

Entry.objects.filter()Entry.objects.get() 如何工作?

他们会一一扫描整个数据库,然后给出结果对象吗?

当我们搜索对象的主键值时会发生什么?

【问题讨论】:

Django filter versus get for single object?的可能重复 没有。他们为什么要那样做?他们向数据库发送 SELECT...WHERE 查询。 "filter" 将为您提供一个对象数组,而"get" 将返回一个对象,如果没有找到则返回一个错误。 查看模型上的db_index,以在特定字段上添加索引。如果您没有索引,您的 sgbd 会进行一次全扫描(我认为是 SQL 中的正常情况)。 【参考方案1】:

取自Django Documentation

返回QuerySets

的方法

get(**kwargs)

返回与给定查找参数匹配的对象,该参数应采用字段查找中描述的格式。

get() 引发 MultipleObjectsReturned 如果找到多个对象。 MultipleObjectsReturned 异常是模型类的一个属性。

get() 如果未找到给定参数的对象,则会引发 DoesNotExist 异常。这个异常是模型类的一个属性。


返回新查询集的方法:

filter(**kwargs)

返回一个新的 QuerySet,其中包含与给定查找参数匹配的对象。


简而言之:get() 返回单个唯一对象,filter() 返回与您的查找参数匹配的所有对象。

【讨论】:

以上是关于Entry.objects.filter() 或 Entry.objects.get() 如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

Django QuestSet API (官方文档)

将 django ORM 与多处理一起使用?

查询条件 时间可以直接比较大小

Django获得post.request的正确返回值

在Django中使用Q()对象

Django中Q查询及Q()对象