sqlalchemy - несколько соединений из одной таблицы в другую - PullRequest
0 голосов
/ 17 августа 2011

У меня есть две таблицы. Первый - таблица матчей, представляющая футбольный матч с двумя командами. Второй - это командная таблица, которая представляет команду. В командном столе будет около 18 команд. В таблице совпадений будет приблизительно 34 матча.

Вместо создания объединения «многие ко многим» я хотел бы создать простое объединение для:

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

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

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

Может быть только один teamID для Match.team1 и один teamID для Match.team2. Как бы я поступил так в классической 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_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 Ответ

1 голос
/ 17 августа 2011
    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),
    })
...