SQLAlchemy hybrid_method - 传递明显的论据

时间:2013-06-11 20:26:45

标签: methods sqlalchemy

我正在使用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()

1 个答案:

答案 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(...)