首页 > 解决方案 > Django QuerySets 有多懒惰?

问题描述

下面的代码会查询数据库两次吗?当然一次开始 for 循环,但它是否使用 len() 查询数据库?我问这个是因为我知道 Django count() 函数查询数据库。

events = Events.objects.all()   

for event in events:         #First Query
    print(event.name)

length = len(events)         #Second Query?

标签: djangodjango-modelsdjango-queryset

解决方案


它只会按文档记录一次访问数据库

在新创建的 QuerySet 中,缓存是空的。第一次评估 QuerySet 时——因此发生数据库查询——Django 将查询结果保存在 QuerySet 的缓存中并返回已明确请求的结果(例如,下一个元素,如果 QuerySet 正在被迭代) . QuerySet 的后续评估重用缓存的结果


推荐阅读