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() 如何工作?的主要内容,如果未能解决你的问题,请参考以下文章