Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django:这会导致多少查询?_Python_Sql_Django_Performance - Fatal编程技术网

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调试工具栏