gpt4 book ai didi

python - 为什么 Django 模型会进行许多小查询而不是一个大查询?

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:29 25 4
gpt4 key购买 nike

对于非特定问题很抱歉,但我想这可能是一个有趣的问题。至少对我来说是这样 ;)

我正在使用 Django 模型一次从几个相关表中获取数据。当 QuerySet 被评估时,我宁愿期望 django 像这样进行查询:

SELECT t1.field1, t1.field2, t2.field1, t2.field2 FROM t1
JOIN t2 ON (t1.fk_t2 = t2.pk);

但我可以看到 Django 正在做这样的事情,而不是我所期望的:

SELECT t1.field1, t1.field2, t1.fk_t2 FROM t1;

然后对于所有的 t1.fk_t2

SELECT t2.field1, t2.field2 FROM t2 WHERE id = (here comes some single id);

这是默认的 Django 行为吗?为什么会这样?这样更有效率吗?我首先想到的是,进行 JOIN 需要进行交叉连接然后过滤非常大的表,当进行许多单选时允许您处理的数据不超过实际需要的数据,但这只是一个想法。

谁能解释一下?提前致谢!

最佳答案

Django 只获取您要求它获取的数据。您可以使用 select_related()prefetch_related()要求它使用 JOIN 在单个查询中获取所有数据。

引用文档:

select_related(*fields)

Returns a QuerySet that will “follow”foreign-key relationships, selecting additional related-object datawhen it executes its query. This is a performance booster whichresults in a single more complex query but means later use offoreign-key relationships won’t require database queries.

prefetch_related(*lookups)

Returns a QuerySet that will automaticallyretrieve, in a single batch, related objects for each of the specifiedlookups.

关于python - 为什么 Django 模型会进行许多小查询而不是一个大查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35199536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com