django - Django QuerySets 有多懒惰?
问题描述
下面的代码会查询数据库两次吗?当然一次开始 for 循环,但它是否使用 len() 查询数据库?我问这个是因为我知道 Django count() 函数查询数据库。
events = Events.objects.all()
for event in events: #First Query
print(event.name)
length = len(events) #Second Query?
解决方案
它只会按文档记录一次访问数据库
在新创建的 QuerySet 中,缓存是空的。第一次评估 QuerySet 时——因此发生数据库查询——Django 将查询结果保存在 QuerySet 的缓存中并返回已明确请求的结果(例如,下一个元素,如果 QuerySet 正在被迭代) . QuerySet 的后续评估重用缓存的结果。
推荐阅读
- r - 没有新渲染的闪亮更新信息框
- python - Python 3.x -PPTX 为什么 template.pptx 对象没有属性'slides_layouts'
- ocaml - Ocaml:如何定义具有特定类型的函数
- c# - 有没有办法使用 Azure Functions 对 Graphql.EntityFramework 进行依赖注入?
- php - 查询不成功返回消息
- python - 如何从 tkinter 以 .html 格式导出 Plotly 图
- spring - spring boot 自定义验证消息未显示
- c# - 如何将位图保存为每像素 8 位的 jpg 图像?
- laravel - 如何在多对一 Eloquent 关系中检索具有另一个名称的列
- python-3.x - 如何在 Ubuntu 18.04 上的 Python3 中安装 Nest