代码之家  ›  专栏  ›  技术社区  ›  Terence Chow

django从3个模型中高效地获取数据

  •  0
  • Terence Chow  · 技术社区  · 8 年前

    我是django的新人,所以请容忍我。

    注意:A->C是1对多关系,而B->C是多对一关系(即每个C只有1个B,但多个C可能具有相同的B)。

    我在想某种形式的 prefetch_related 但据我所知,这意味着我要打3db的电话?

    另外,有没有什么地方可以看到Django运行的SQL查询?我用mysql作为数据库。

    Class A(models.Model):
        pass
    
    Class B(models.Model):
        pass
    
    Class C(models.Model):
        a = models.ForeignKey(A)
        b = models.ForeignKey(B)
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   trinchet    8 年前

    你可以用 select_related 取而代之的是:

    C.objects.filter(<your filter if any>).select_related('a', 'b')
    

    这将从数据库中检索相关字段的所有数据 a b ,在单个查询中。你可以看出 prefetch_related here

    关于你的第二个问题

    有没有什么地方可以看到Django运行的SQL查询?

    是的,你可以看到他们用 django-debug-toolbar ,在面板SQL中。