我是django的新手,请多多包涵。
我有以下关系。如果我拥有模型A的主键,如何在最有效的查询中从A,B和C获取所有数据?
注意:A-> C是一对多的关系,而B-> C是多对一的关系(即每个C仅具有1 B,但多个C可能具有相同的B)。
我正在考虑某种形式的prefetch_related
,但据我了解,这意味着我要进行3次数据库调用?
还可以在某个地方看到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)
答案 0 :(得分:0)
您可以改用select_related
:
C.objects.filter(<your filter if any>).select_related('a', 'b')
这将在一次查询中从数据库中检索相关字段a
和b
的所有数据。您可以看到与prefetch_related
here的区别。
关于第二个问题
有什么地方可以看到Django运行的SQL查询吗?
是的,您可以在SQL面板中使用django-debug-toolbar来查看它们。