django / python - db访问变量时命中

时间:2011-07-01 12:08:11

标签: python django

class AppUser(models.Model):
    user = models.ForeignKey(User, unique=True)
    slug = models.SlugField(editable=False, blank=True)

对于上面的模型,假设我们在模板

中有一个对象“appuser”

每次我们使用它时,django是否会像我们的代码中的appuser.user.username一样点击用户数据库?

在访问外键和多对多变量时如何完成django / python db查找?

3 个答案:

答案 0 :(得分:2)

您应仔细阅读本文,了解数据库访问优化的所有详细信息:https://docs.djangoproject.com/en/1.3/topics/db/optimization/

select_related()

https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

至于你的问题的快速回答:这取决于你如何检索对象

appuser = AppUser.objects.get(pk=id)

它将分别为appuser.user点击数据库。

但是

appuser = AppUser.objects.select_related().get(pk=id)

它将执行联接查询,因此访问appuser.user不会触发SQL查询。

答案 1 :(得分:0)

如果settings.DEBUG设置为True,则应启用SQL日志记录。至于你的问题,是的,当你执行appuser.user.username时,AppUser会加入User表(使用主键)。

如果您正在运行开发网络服务器,您应该能够在控制台上看到日志。

答案 2 :(得分:0)

它在文档上

querysets are lazy

when querysets are evaluated

减少db命中,请查看BéresBotond的回答