2024-05-16 19:02:59 发布
网友
我看了文件,但解释不够。所以我决定在这里寻求帮助。你知道吗
sqlalchemy加载方法:joinedload、lazyload、defaultload和subqueryload之间有什么区别?特别是联合载荷和子载荷的区别。 我很高兴看到对这些差异尽可能简单的解释。谢谢
假设一个类a包含一个指向B和C的子对象列表:
class A: b_list = relationship(B, lazy='joined') c_list = relationship(C, lazy='joined') class B: a_id = Column(ForeignKey('a.id')) class C: a_id = Column(ForeignKey('a.id'))
如果将b\u list和c\u list都设置为joinedload,则将发出以下sql(或类似sql):
SELECT ... FROM A LEFT JOIN B ON B.a_id = A.id LEFT JOIN C ON C.a_id = A.id WHERE ...
如果B和C中都有1000个元素,那么将返回1000000行,然后sqlalchemy将在python空间中整理出重复的元素。对于大量的数据和更多的关系,它甚至可能会导致数据库或应用程序内存不足。你知道吗
子queryload不应该有这个问题,因为所有关系都是单独加载的。我不完全确定subqueryload和selectin之间的区别,但是根据文档(https://docs.sqlalchemy.org/en/13/orm/loading_relationships.html#subquery-eager-loading),selectinload基本上是subqueryload的高级版本。你知道吗
值得一提的是,在我们的项目中,我们使用以下策略(实际上是自动的):
假设一个类a包含一个指向B和C的子对象列表:
如果将b\u list和c\u list都设置为joinedload,则将发出以下sql(或类似sql):
如果B和C中都有1000个元素,那么将返回1000000行,然后sqlalchemy将在python空间中整理出重复的元素。对于大量的数据和更多的关系,它甚至可能会导致数据库或应用程序内存不足。你知道吗
子queryload不应该有这个问题,因为所有关系都是单独加载的。我不完全确定subqueryload和selectin之间的区别,但是根据文档(https://docs.sqlalchemy.org/en/13/orm/loading_relationships.html#subquery-eager-loading),selectinload基本上是subqueryload的高级版本。你知道吗
值得一提的是,在我们的项目中,我们使用以下策略(实际上是自动的):
相关问题 更多 >
编程相关推荐