SQL Alchemy 与“where”子句的关系

Mat*_*ian 3 python sqlalchemy flask-sqlalchemy

是否可以建立这样的关系:

class Games(Base):
    publishers = relationship(GameCompany).where(GameCompany.role == 'publisher')
    developers = relationship(GameCompany).where(GameCompany.role == 'developer')
Run Code Online (Sandbox Code Playgroud)

本质上,创建一个执行连接并具有 where 子句的模型属性。

GameCompany(game_id, company_id, role)
Run Code Online (Sandbox Code Playgroud)

van*_*van 6

这是绝对有可能的。请阅读文档的指定备用连接条件部分sqlalchemy以及示例代码。您的模型的代码可能如下所示:

class GameCompany(Base):
    id = Column(Integer, primary_key=True)
    company_id = Column(ForeignKey('games.id'))
    # ...

class Games(Base):
    __tablename__ = 'games'
    id = Column(Integer, primary_key=True)
    # ...
    publishers = relationship(GameCompany, 
        primaryjoin=and_(GameCompany.game_id == id, GameCompany.role == 'publisher'))
    developers = relationship(GameCompany, 
        primaryjoin=and_(GameCompany.game_id == id, GameCompany.role == 'developer'))
Run Code Online (Sandbox Code Playgroud)