使用SQLAlchemy,有没有办法事先知道关系是否会延迟加载?
例如,给定一个惰性的parent->子关系和一个“父”的实例X,我想知道是否已经加载了“X.children”,而没有触发查询。
答案 0 :(得分:15)
您可以从sqlalchemy.orm.attributes.instance_state(obj).unloaded
获取所有已卸载属性(关系和列)的列表。
请参阅:Completing object with its relations and avoiding unnecessary queries in 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
答案 1 :(得分:5)
我认为您可以查看孩子的__dict__
属性字典,以检查数据是否已存在。
答案 2 :(得分:3)
比Haes回答稍微整洁(虽然它有效地做同样的事情)是使用hasattr(),如:
>>> hasattr(X, 'children')
False