У меня есть две таблицы в базе данных MySQL, которые я хочу объединить в одну таблицу в другой базе данных. Таблицы состоят из четырех столбцов, которые вместе образуют составной первичный ключ. Ниже приведен пример одной из таблиц:
class GamesATP(Base):
__tablename__ = "games_atp"
__table_args__ = {"schema": "oncourt",
"extend_existing": True}
ID_T_G = Column(Integer, ForeignKey("oncourt.tours_atp.ID_T"), primary_key=True)
ID_R_G = Column(Integer, ForeignKey("oncourt.rounds.ID_R"), primary_key=True)
ID1_G = Column(Integer, ForeignKey("oncourt.players_atp.ID_P"), primary_key=True)
ID2_G = Column(Integer, ForeignKey("oncourt.players_atp.ID_P"), primary_key=True)
Вторая таблица идентична, за исключением atp
= wta
и ATP
= WTA
.
Моя идея заключалось в том, чтобы добавить данные из двух таблиц в новую таблицу с новым столбцом tour_id
, который будет 0
для atp
и 1
для wta
. Я также добавлю новый столбец match_id
в качестве первичного ключа.
Чтобы затем построить запрос на добавление, я решил, что мне нужно определить отношения между двумя таблицами как 2x ForeignKeyConstraint
s как следует:
class MatchesBLG(Base):
__tablename__ = "matches_blg"
__table_args__ = (
ForeignKeyConstraint(
["tour_id", "tournament_id", "round_id", "p1_id", "p2_id"],
[
"0",
"oncourt.games_atp.ID_T_G",
"oncourt.games_atp.ID_R_G",
"oncourt.games_atp.ID1_G",
"oncourt.games_atp.ID2_G",
]
),
ForeignKeyConstraint(
["tour_id", "tournament_id", "round_id", "p1_id", "p2_id"],
[
"1",
"oncourt.games_wta.ID_T_G",
"oncourt.games_wta.ID_R_G",
"oncourt.games_wta.ID1_G",
"oncourt.games_wta.ID2_G",
]
),
{"schema": "belgarath", "extend_existing": True},
)
match_id = Column(Integer, primary_key=True)
tour_id = Column(Integer, index=True)
tournament_id = Column(Integer, index=True)
round_id = Column(Integer, index=True)
p1_id = Column(Integer, index=True)
p2_id = Column(Integer, index=True)
Это дает мне ошибку:
ArgumentError: ForeignKeyConstraint on belgarath.matches_blg(tour_id, tournament_id, round_id, p1_id, p2_id) refers to multiple remote tables: 0 and oncourt.games_atp
У меня скрытое подозрение, что у меня не должно быть двух ограничений в одной таблице, но я безнадежно выхожу моей глубины здесь. Как лучше всего создавать объединения?