如何使用SQLAlchemy找出是否还没有加载惰性关系?
-
06-07-2019 - |
题
使用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
不隶属于 StackOverflow