访问SQLAlchemy查询的加载选项

时间:2019-02-13 23:31:51

标签: python sqlalchemy flask-sqlalchemy

我正在将用于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,但根本不影响实例状态的加载选项。

  1. 我已经考虑过使用item._sa_instance_state.unloaded来指示是否已联合加载某些内容。如果已被联合加载,则该字段将不在item._sa_instance_state.unloaded中。这是正确的吗?
  2. 如果某个内容是noloadraiseloadselect,在访问之前它们是否会不在item._sa_instance_state.unloaded中?

如果在查询后有更好的方法来检测实例的负载选项,可以请有人启发我吗?

0 个答案:

没有答案