Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Mysql django查询的费用_Mysql_Django_Django Templates - Fatal编程技术网

Mysql django查询的费用

Mysql django查询的费用,mysql,django,django-templates,Mysql,Django,Django Templates,我有两张桌子:演员和图像。Images表通过外键链接到Actor表。我可能会对Actor进行查询,从中提取所有Actor的列表,其名字以字母a开头。假设我将此查询结果存储在Actor_列表中,并将其传递给模板。通过迭代,我可以通过模板获得所有图像的列表。比如: {% for actor in actor_list %} {% for image in actor.img_set %} {{ image }} {% endfor %} {% endfor %} 这对

我有两张桌子:演员和图像。Images表通过外键链接到Actor表。我可能会对Actor进行查询,从中提取所有Actor的列表,其名字以字母a开头。假设我将此查询结果存储在Actor_列表中,并将其传递给模板。通过迭代,我可以通过模板获得所有图像的列表。比如:

{% for actor in actor_list %}
    {% for image in actor.img_set %}
       {{ image }}
    {% endfor %}
{% endfor %}
这对数据库来说代价高昂吗?关联的img_集是否与初始actor对象列表一起通过,或者每次我调用actor.img_集时是否都会有一个新的查询命中数据库?

您应该安装,并查看封面下发生了什么SQL查询


如果查询太多,可以尝试使用select_related()在初始查询中拉入相关数据。

使用连接库比使用django工具栏更好。调试设置为True时:

>>> from django.db import connection
>>> for actor in actor_list:
>>>  for image in actor.img_set:
>>>   image
>>> connection.queries()
这将显示执行的所有查询以及每个查询花费的时间


调试工具栏很酷,但有很多用途。:-)

同意调试工具栏的建议,但是在出现反向关系的情况下,
select_related()
不会有帮助,这似乎是这样的。@ed:除了Daniel的评论和你的最后一个问题:如果是反向关系,每个演员都会点击数据库来获得他的图像集……谢谢你的输入。跟进问题。在从Django调试工具栏检查SQL之后,我看到数据库甚至因为以下原因而受到影响:{{actor_list.0.id}。当已经创建了actor_列表时,为什么SQL查询会退出?但是,如果我遍历actor_列表并以这种方式提取id,则不会创建额外的查询