django 哪个过滤器更好更快

fdbelqdn  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(123)

我对django和python比较陌生,所以我真的很想知道这两个实现中哪一个更好或更快。我目前正在使用过滤器,但我想到了它,因为我真的很喜欢列表理解,我用列表理解写了同样的代码。这两个代码做完全相同的事情,但我只是想知道从开发人员与更多的经验,这是更好的,为什么。下面是两个代码。

posts = Post.objects.filter(approved=True).order_by('-date_posted')

posts = [post for post in Post.objects.all().order_by('-date_posted') if post.approved]
hc2pp10m

hc2pp10m1#

.filter(..) * 不是 * 实现来在Django/Python级别执行过滤:使用WHERE(或HAVING)子句在数据库上进行过滤。数据库是设计用于存储、检索和聚合大量数据的系统。
如果你经常在approved值上过滤,你可以在列上添加一个索引:

class Post(models.Model):
    approved = models.BooleanField(db_index=True)

在这种情况下,数据库将添加一个索引结构,使过滤更有效。
通常在数据库上进行过滤会更好,因为这意味着数据库需要与Python/Django层进行更少的记录通信,而且Django必须将更少的对象转换为内存对象。因此,即使使用列表解析进行过滤与通过数据库进行过滤一样快,它仍然效率较低,因为Python/Django首先必须将更多的元素解析化。如果元素的数量不断增加,最终将导致内存问题,因为您无法同时在内存中存储所有记录。

相关问题