16

SQLAlchemy を使用して、リレーションが遅延ロードされるかどうかを事前に知る方法はありますか?
たとえば、怠惰な親 - >子関係と「親」のインスタンス X が与えられた場合、クエリをトリガーせずに「X.children」が既にロードされているかどうかを知りたいと思います。

4

3 に答える 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 に答える