Django4 中文入门教程 Django4.0 数据库访问优化-理解QuerySet

2024-02-25 开发教程 Django4 中文入门教程 匿名 3

理解 ​QuerySets ​是用简单代码获得高效率的关键。特别是在:

理解 QuerySet 的执行过程

要避免执行过程中的问题,一定要理解:

  • QuertSets 是惰性的。
  • 当 它们被计算时。
  • 数据如何保存在内存中。

理解缓存属性

除了缓存整个 ​QuerySet ​之外,还缓存了 ​ORM ​对象的属性结果。 通常,不可调用的属性将被缓存。 例如,假设示例博客模型:

>>> entry = Entry.objects.get(id=1)
>>> entry.blog # Blog object is retrieved at this point
>>> entry.blog # cached version, no DB access

但一般来说,可调用对象属性每次都会触发数据库查询:

>>> entry = Entry.objects.get(id=1)
>>> entry.authors.all() # query performed
>>> entry.authors.all() # query performed again

使用 with 模板标签

要使用 ​QuerySet ​的缓存行为,你可能需要使用 ​with ​模板标签。

使用 iterator()

当你有很多对象时,​QuerySet ​的缓存行为可能会导致大量的内存被使用。在这种情况下,​iterator()​ 可能会有帮助。

使用 explain()

QuerySet.explain()​ 为你提供有关数据库如何执行查询的详细信息,包括使用的索引(indexes)和连接(jion)。这些细节可能会帮助你找到可以更有效地重写的查询,或确定可以添加的索引以提高性能。