通过自我访问相关对象是否会影响Django中的数据库?

时间:2018-08-13 11:44:30

标签: django django-models

在Django中,如果我在模型中有一个ForeignKey或ManyToMany字段,那么每次尝试通过self访问它们时数据库都会命中吗?

在此示例中,数据库命中了多少次?

# loop done 10 times
for x in looping_array:
    print(self.foreign_key_object)
    print(self.many_to_many_field.first())

编辑:添加了many_to_many_field行

1 个答案:

答案 0 :(得分:1)

它将仅命中一次DB。第二次及以后的调用将使用缓存的数据。来自docs

  

第一次缓存对多对多关系的访问   相关对象被访问。后续对外键的访问   在同一对象实例上被缓存。示例:

>>> e = Entry.objects.get(id=2)
>>> print(e.blog)  # Hits the database to retrieve the associated Blog.
>>> print(e.blog)  # Doesn't hit the database; uses cached version.

对于manytomany sinse self.many_to_many_field.first()是一个查询集,它将不被缓存,并且每次迭代都会命中db。