基本上,我遇到了一个问题,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
,而不是重用从原始查询中获取(并丢弃)的数据。
有人可以建议我做错了什么以及为什么,尽管实际上在第一次加载时进行了连接,它不会在任何地方缓存或使用它,而是通过单独的选择再次加载第二个表?
答案 0 :(得分:0)
这是由于提取和读取导致其过期的数据之间的提交。使用expire_on_commit = False
解决该会话问题。