Python django:这会导致多少查询?
假设我有以下型号:Python django:这会导致多少查询?,python,sql,django,performance,Python,Sql,Django,Performance,假设我有以下型号: class Baz(models.Model): winning = models.CharField(max_length=100) class Bar(models.Model): baz = models.ForeignKey(Baz) class Foo(models.Model): bar = models.ForeignKey(Bar) 现在我有一个Foo,Foo的实例。下一行执行多少查询 winning = foo.bar.baz.
class Baz(models.Model):
winning = models.CharField(max_length=100)
class Bar(models.Model):
baz = models.ForeignKey(Baz)
class Foo(models.Model):
bar = models.ForeignKey(Bar)
现在我有一个Foo
,Foo
的实例。下一行执行多少查询
winning = foo.bar.baz.winning
它是为每个外键做一个查询,还是Django足够聪明,在这里只做一个查询?有一个快速的方法可以判断。安装Django工具栏。然后查看“查询”选项卡。它会给你各种分析信息
虽然我相信每个FK呼叫+1查询有一个快速的方法来判断。安装Django工具栏。然后查看“查询”选项卡。它会给你各种分析信息
虽然我相信每个FK调用+1查询将需要3个查询 一个可以得到食物,酒吧和巴兹 用于立即获取它们
Foo.objects.get(id=1).select_related('bar__baz__winning')
这将需要3个查询 一个可以得到食物,酒吧和巴兹 用于立即获取它们
Foo.objects.get(id=1).select_related('bar__baz__winning')
下面是对
winning=foo.bar.baz.winning
语句的查询:(我不算foo.objects..statemnt)
我的建议是:在设置中添加django.db.backends的日志记录。
您将在控制台中看到所有查询。或者按照Francis的建议安装Django调试工具栏。以下是对
wing=foo.bar.baz.wing
语句的查询:(我不算foo.objects..statemnt)
我的建议是:在设置中添加django.db.backends的日志记录。
您将在控制台中看到所有查询。或者根据您的建议安装Django调试工具栏