我正在将用于SQLAlchemy实例的简单序列化器编写到Python字典中,并尝试仅序列化急切加载的对象,但不包括那些未加载的对象。更具体地说,我尝试检查从具有自定义加载选项的查询中检索到的SQLAlchemy对象的关系的加载选项。例如。
class Item(db.Model):
...
field = db.relationship('Field', lazy='raise')
item = session.query(Item).options([joinedload(Item.field)]).first()
现在,我希望Item.field关系具有惰性=“ joined”,因为我在查询时覆盖了加载选项,但是当我签入item._sa_instance_state.mapper.relationships.get('field').lazy
时,它仍然是'raise'
。
换句话说,似乎SQLAlchemy的查询加载选项已转换为SQL,但根本不影响实例状态的加载选项。
item._sa_instance_state.unloaded
来指示是否已联合加载某些内容。如果已被联合加载,则该字段将不在item._sa_instance_state.unloaded
中。这是正确的吗?noload
,raiseload
或select
,在访问之前它们是否会不在item._sa_instance_state.unloaded
中?如果在查询后有更好的方法来检测实例的负载选项,可以请有人启发我吗?