0

我正在使用 python 和 sqlalchemy。我有一张名为 Team 的桌子和另一张名为 Game 的桌子。Game 表具有列“away_id”和“home_id”,而 Team 表具有列“team_id”。我刚刚为 Team 类创建了这个 hybrid_method,它将返回 away_id 或 home_id 与 team_id 匹配的所有游戏实例。我传递给它的参数 s 是一个会话实例。如何将此代码编写为@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()
4

1 回答 1

1

首先,从我在这里看到的情况来看,这不是“@hybrid”混合的用例,专门用于您想说的用例:“MyClass.games == something”,在类级别,以及实例级别的“my_object.games == something”。这不是这里的情况,你试图完整地运行一个查询,将一个特定的传递给self.team_id它 - 所以你需要一个self,所以这只是一个常规的方法或描述符。

因此,只需将 @property 与 object_session() 一起使用,就像文档在这里所说的那样:

class MyClass(Base):
   # ...

   @property
   return object_session(self).query(Game).filter(...)
于 2013-06-17T04:45:25.707 回答