使用SQLAlchemy,有没有办法事先知道关系是否会延迟加载?
例如,给定一个懒惰的父 - >儿童关系和一个“父母”的实例X,我想知道“X.children”是否为“X.children”。已加载,但未触发查询。

有帮助吗?

解决方案

我认为您可以查看孩子的 __ dict __ 属性字典,以检查数据是否已经存在。

其他提示

您可以从 sqlalchemy.orm.attributes.instance_state(obj).unloaded 获取所有已卸载属性(关系和列)的列表。

请参阅:完成对象及其关系并避免在sqlalchemy中进行不必要的查询

更简单的方法是使用 inspect(),它会产生相同的结果:

from sqlalchemy import inspect
from sqlalchemy.orm import lazyload

user = session.query(User).options(lazyload(User.articles)).first()
ins = inspect(user)

ins.unloaded  # <- set or properties that are not yet loaded

比Haes回答稍微整洁(虽然它有效地做同样的事情)是使用hasattr(),如:

>>> hasattr(X, 'children')
False
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top