我对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]
答案 0 :(得分:0)
未实现.filter(..)
来在Django / Python级别执行过滤:使用WHERE
(或HAVING
在数据库上进行过滤)条款。数据库是旨在存储,检索和聚集大量数据的系统。
如果您经常对approved
值进行排序,则会在该列上添加索引:
class Post(models.Model):
approved = models.BooleanField(db_index=True)
在这种情况下,数据库将添加索引结构,从而使过滤更加有效。
通常最好对数据库进行过滤,因为这意味着数据库需要向Python / Django层传递较少的记录,并且Django必须将较少的对象反序列化成内存对象。因此,即使使用列表理解进行过滤与通过数据库进行过滤一样快,它仍然会降低效率,因为Python / Django首先必须反序列化更多元素。如果元素数量在增加,最终将导致内存问题,因为您无法同时将所有记录存储在内存中。