codecamp

Django4.0 数据库访问优化-理解QuerySet

理解 ​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)。这些细节可能会帮助你找到可以更有效地重写的查询,或确定可以添加的索引以提高性能。


Django4.0 数据库访问优化-使用标准数据库优化技巧
Django4.0 数据库访问优化-在数据库中执行数据库操作,而不是在Python代码中
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Django4.0 模型和数据库

Django4.0 处理HTTP请求

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }