SQLAlchemy を使用して、リレーションが遅延ロードされるかどうかを事前に知る方法はありますか?
たとえば、怠惰な親 - >子関係と「親」のインスタンス X が与えられた場合、クエリをトリガーせずに「X.children」が既にロードされているかどうかを知りたいと思います。
3549 次
3 に答える
23
アンロードされたすべてのプロパティ (リレーションと列の両方) のリストを から取得できます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
于 2014-07-29T09:05:24.683 に答える
5
__dict__
子の属性辞書を見て、データが既に存在するかどうかを確認できると思います。
于 2008-11-04T07:48:26.470 に答える
3
Haesの答えよりも少しすっきりしています(効果的に同じことをしますが)は、次のようにhasattr()を使用することです。
>>> hasattr(X, 'children')
False
于 2013-01-15T10:34:28.860 に答える