Если вам действительно нужно кэшировать результат, см. Ниже (решение, очень похожее на другой вопрос, который вы разместили):
class MyChild(Base):
__tablename__ = 'MyChild'
id = Column(Integer, primary_key=True)
parent = relation('Parent')
# ... other mapped properties
def __init__(self):
_parent_cached = None
@property
def parent_cached(self):
if self._parent_cached is None:
self._parent_cached = self.parent
Но чтобы получить результат, когда ваш объект отсоединен от сеанса, вы должны вызвать это свойство перед отсоединением. (Также не обрабатывается ситуация, когда parent
равен None
. У вас всегда есть родитель?).
Опция с активной загрузкой проще, и как только вы загрузите объект, у вас уже должно быть загружено отношение (ключ должен иметь lazy=False
):
class MyChild(Base):
__tablename__ = 'MyChild'
id = Column(Integer, primary_key=True)
parent = relation('Parent', lazy=False)
# ... other mapped properties
...