2024-09-29 21:27:48 发布
网友
在LINQ中(我来自C背景),您可以通过Include(“xxx”)方法手动加载相关表的数据
from a in ctx.MainTable.Include("SubTable") select a;
在上面的代码中,MainTable的每个实例和主表.子表也加载了。如果不调用“Include”,则返回的每个MainTable的SubTable属性都将返回null。在
Django ORM是否有等效的方法?如果不是,那么对于上述情况,默认的Django行为是什么?在
看到这个:
http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4
您可以创建一个select_related查询集来跟踪关系并预取相关行。在
select_related
通常,在您知道ORM自动完成的单个获取太慢之前,您不会浪费太多时间。在
当您简单地命名一个相关的对象字段时:
x = MainTable.objects.get( id="some Object" ) y= x.subTable
ORM将执行相关子表行的操作。懒洋洋的。在
你不可能轻易地把整个表存入内存。查询集是“懒惰”的,在没有可能的借口之前不会获取行。想想这个。在
那么您可能并不需要MainTable中的所有对象。查询集已准备好获取它们。但它并不能把它们都弄到手。这就是为什么我们通常只做x.subTable以外的事情,并将其留给ORM根据需要获取行。在
MainTable
x.subTable
偶尔你可以证明它太慢了。然后可以执行MainTable.objects.select_related()...并强制导航到其他表中的行。在
MainTable.objects.select_related()...
看到这个:
http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4
您可以创建一个
select_related
查询集来跟踪关系并预取相关行。在通常,在您知道ORM自动完成的单个获取太慢之前,您不会浪费太多时间。在
当您简单地命名一个相关的对象字段时:
ORM将执行相关子表行的操作。懒洋洋的。在
你不可能轻易地把整个表存入内存。查询集是“懒惰”的,在没有可能的借口之前不会获取行。想想这个。在
^{pr2}$那么您可能并不需要
MainTable
中的所有对象。查询集已准备好获取它们。但它并不能把它们都弄到手。这就是为什么我们通常只做x.subTable
以外的事情,并将其留给ORM根据需要获取行。在偶尔你可以证明它太慢了。然后可以执行
MainTable.objects.select_related()...
并强制导航到其他表中的行。在相关问题 更多 >
编程相关推荐