Django如何实现“过滤器”?是选择所有内容然后过滤吗?

Django如何实现“过滤器”?是选择所有内容然后过滤吗?,django,Django,我想返回x=y的位置,其中包含Something.objects.getx=y 我读过Django中可能有一个过滤器,但我担心Django是否在做一些愚蠢的事情,比如从内存中的数据库中选择所有内容,然后像rails那样挑选与python不匹配的内容 这就是Django在做的事吗?如果是这样,我将只运行原始SQL 我在《关于多重》一书中看到的唯一一件事是,多重对象被视为一个例外。你想要的。过滤器。它将返回QuerySet的一个实例。在尝试迭代查询集之前,不会执行查询。这允许您链接调用以构建复杂查询

我想返回x=y的位置,其中包含Something.objects.getx=y

我读过Django中可能有一个过滤器,但我担心Django是否在做一些愚蠢的事情,比如从内存中的数据库中选择所有内容,然后像rails那样挑选与python不匹配的内容

这就是Django在做的事吗?如果是这样,我将只运行原始SQL

我在《关于多重》一书中看到的唯一一件事是,多重对象被视为一个例外。

你想要的。过滤器。它将返回QuerySet的一个实例。在尝试迭代查询集之前,不会执行查询。这允许您链接调用以构建复杂查询

查询是在SQL中完成的,而不是在python中

您可以通过查看结果查询集上的.query来检查将运行的查询

>>>Something.objects.filterx='y'.query 从x='y'中选择id、x等; .get用于获取单个对象。

您需要的。筛选器。它将返回QuerySet的一个实例。在尝试迭代查询集之前,不会执行查询。这允许您链接调用以构建复杂查询

查询是在SQL中完成的,而不是在python中

您可以通过查看结果查询集上的.query来检查将运行的查询

>>>Something.objects.filterx='y'.query 从x='y'中选择id、x等; .get用于获取单个对象

。。。但我厌倦了Django是否在幕后做一些愚蠢的事情,比如从内存中的数据库中选择所有内容,然后像rails那样挑选与python不匹配的内容

不,Django的ORM将创建一个SQL查询。除非您以某种方式修补对象管理器,否则它将因此生成一个查询,在该查询中过滤发生在数据库端

如果希望所有元素都满足给定条件,则应使用.filter。。因此:

这将返回一个QuerySet:一个可能没有SomeModel对象的集合

如果要检索单个元素,请使用.get..:

如果不存在此类记录,则返回SomeModel.DoesNotExist;如果找到给定条件的两个或多个记录,则返回SomeModel.MultipleObject

。。。但我厌倦了Django是否在幕后做一些愚蠢的事情,比如从内存中的数据库中选择所有内容,然后像rails那样挑选与python不匹配的内容

不,Django的ORM将创建一个SQL查询。除非您以某种方式修补对象管理器,否则它将因此生成一个查询,在该查询中过滤发生在数据库端

如果希望所有元素都满足给定条件,则应使用.filter。。因此:

这将返回一个QuerySet:一个可能没有SomeModel对象的集合

如果要检索单个元素,请使用.get..:


如果不存在此类记录,则返回SomeModel.DoesNotExist;如果在给定条件下找到两个或多个记录,则返回SomeModel.MultipleObject。

Downvoat且没有关于实现的答案?Downvoat且没有关于实现的答案?
SomeModel.objects.filter(x=y)
SomeModel.objects.get(x=y)