我正在使用python和sqlalchemy。我有一个名为Team的表,另一个名为Game。 Game表中有“away_id”和“home_id”列,Team表中有“team_id”列。我刚刚为Team类创建了这个hybrid_method,它将返回所有游戏实例,其中away_id或home_id与team_id匹配。我传递它的参数是一个会话实例。如何将此代码编写为@hybrid_property,我不必将其传递给会话实例?
@hybrid_method
def games(self, s):
return s.query(Game).filter(or_(Game.away_id==self.team_id, Game.home_id==self.team_id)).all()
答案 0 :(得分:1)
首先,从我在这里看到的这不是用于“@hybrid”混合的用例,特别用于你想说的用例:“MyClass.games == something”,at the类级别,以及实例级别的“my_object.games == something”。这不是这种情况,您尝试完整地运行查询,将特定的self.team_id
传递给它 - 因此您需要self
,因此这只是常规方法或描述符。
所以只需将@property与object_session()一起用作文档say right here:
class MyClass(Base):
# ...
@property
return object_session(self).query(Game).filter(...)