我对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]
1条答案
按热度按时间hc2pp10m1#
.filter(..)
* 不是 * 实现来在Django/Python级别执行过滤:使用WHERE
(或HAVING
)子句在数据库上进行过滤。数据库是设计用于存储、检索和聚合大量数据的系统。如果你经常在
approved
值上过滤,你可以在列上添加一个索引:在这种情况下,数据库将添加一个索引结构,使过滤更有效。
通常在数据库上进行过滤会更好,因为这意味着数据库需要与Python/Django层进行更少的记录通信,而且Django必须将更少的对象转换为内存对象。因此,即使使用列表解析进行过滤与通过数据库进行过滤一样快,它仍然效率较低,因为Python/Django首先必须将更多的元素解析化。如果元素的数量不断增加,最终将导致内存问题,因为您无法同时在内存中存储所有记录。