django select_related() 缓存查询

那其实是等于查询了两次数据库,对于要求效率比较高的朋友来说可能就不符合你的要求,有什么好的办法可以解决的吗?
答案就在今天说的django select_related()
还是拿上面的例子来说吧。

b = Book.objects.select_related().get(id=4)
p = b.name # 没有查询数据库
c = p.age # 没有查询数据库

而:
b = Book.objects.get(id=4) # No select_related() in this example.
p = b.name # 查询了数据库.
c = p.age # 查询了数据库.

你也可以控制查询缓存的深度。
b = Book.objects.select_related(depth=1).get(id=4)
p = b.name # 没有查询数据库
c = p.age # 查询了数据库.

通过上面的例子,你应该大体的明白django select_related()的作用吧,我感觉django select_related()有点像一种缓存的结构,
把外键的记录一起查询出来,然后放到记录集里,等到下次要用数据的时候就不用再查询数据库了,直接从缓存的记录集里去拿数据。
不过任何事物都有两面性,上面说到了它有利的方面,我大概说说不好的方面,我感觉它既然缓存记录的话,那对于时效性比较强的应用
来说可能就不合适了,数据可以不能及时的被更新,django的有些机制处理还是很不错的,比如: [django template 语法],[django template extends] , [django template filter

原文地址:https://www.cnblogs.com/lhj588/p/2405653.html