sqlalchemy - 从一个表到另一个表的几个连接

时间:2011-08-17 14:11:55

标签: orm mapping sqlalchemy

我有两张桌子。第一个是比赛表,代表一个有两支球队的足球比赛。第二个是代表团队的团队表。 Team表中将有大约18个团队。匹配表中将有大约34场比赛。

我不想创建多对多连接,而是创建一个简单的连接:

Match.matchID --------------------> 1

Match.team1 ----------------------> Team.teamID

Match.team2 ----------------------> Team.teamID

Match.team1只能有一个teamID,Match.team2只能有一个teamID。我将如何在classicaly sqlalchemy中进行此操作?我目前在匹配表中有以下内容:

match_table = Table('match',metadata,
  Column('matchID', Integer, primary_key=True),
  Column('matchTeam1',Integer,ForeignKey('team.teamID')),
  Column('matchTeam2',Integer,ForeignKey('team.teamID')),

以及Team表的以下内容:

team_table = Table('team',metadata,
  Column('teamID',Integer,primary_key=True),
  Column('teamShortName',String),

我如何在这里创建映射?像下面这样的东西似乎不起作用 - 是否有不同的语法使用?

mapper(Match,match_table,properties={
  'team1':relationship(Team),
  'team2':relationship(Team),
})

1 个答案:

答案 0 :(得分:1)

    mapper(Match,match_table,properties={
      'team1':relationship(Team, foreign_keys=[match_table.c.matchTeam1], 
          primaryjoin=match_table.c.matchTeam1==team_table.teamID),
      'team2':relationship(Team, foreign_keys=[match_table.c.matchTeam2], 
          primaryjoin=match_table.c.matchTeam2==team_table.teamID),
    })