SQLAlchemy使用连接关系查询两次

时间:2016-06-24 08:47:50

标签: python sqlalchemy

基本上,我遇到了一个问题,SQLAlchemy(版本1.0.13)最终会在我尝试访问另一个表的任何属性时,分别查询应该作为连接加载的表。通过myrelationship关系。

关系定义如下:

myrelationship = db.relationship(
    'MyChild',
    uselist=False,
    viewonly=True,
    lazy='joined',
    foreign_keys=[whatever_id],
    primaryjoin=(whatever_id == MyChild.whatever_other_id) 
)

对于第一个查询,例如session.query(MyParent).filter(...).first(),它使用连接正确查询和检索两个表中的所有列,这是预期的行为。

当我尝试执行myparent.meta.whatever时会出现问题,这会使SQLAlchemy通过select单独查询MyChild,而不是重用从原始查询中获取(并丢弃)的数据。

有人可以建议我做错了什么以及为什么,尽管实际上在第一次加载时进行了连接,它不会在任何地方缓存或使用它,而是通过单独的选择再次加载第二个表?

1 个答案:

答案 0 :(得分:0)

这是由于提取和读取导致其过期的数据之间的提交。使用expire_on_commit = False解决该会话问题。