Django ORM的“相关数据”加载行为

2024-09-29 21:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在LINQ中(我来自C背景),您可以通过Include(“xxx”)方法手动加载相关表的数据

from a in ctx.MainTable.Include("SubTable")
select a;

在上面的代码中,MainTable的每个实例和主表.子表也加载了。如果不调用“Include”,则返回的每个MainTable的SubTable属性都将返回null。在

Django ORM是否有等效的方法?如果不是,那么对于上述情况,默认的Django行为是什么?在


Tags: 数据django方法代码infrominclude手动
1条回答
网友
1楼 · 发布于 2024-09-29 21:27:48

看到这个:

http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4

您可以创建一个select_related查询集来跟踪关系并预取相关行。在

通常,在您知道ORM自动完成的单个获取太慢之前,您不会浪费太多时间。在

当您简单地命名一个相关的对象字段时:

x = MainTable.objects.get( id="some Object" )
y= x.subTable

ORM将执行相关子表行的操作。懒洋洋的。在

你不可能轻易地把整个表存入内存。查询集是“懒惰”的,在没有可能的借口之前不会获取行。想想这个。在

^{pr2}$

那么您可能并不需要MainTable中的所有对象。查询集已准备好获取它们。但它并不能把它们都弄到手。这就是为什么我们通常只做x.subTable以外的事情,并将其留给ORM根据需要获取行。在

偶尔你可以证明它太慢了。然后可以执行MainTable.objects.select_related()...并强制导航到其他表中的行。在

相关问题 更多 >

    热门问题