Как соединить одну таблицу с двумя другими таблицами, каждая из которых имеет составной первичный ключ? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть две таблицы в базе данных 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

У меня скрытое подозрение, что у меня не должно быть двух ограничений в одной таблице, но я безнадежно выхожу моей глубины здесь. Как лучше всего создавать объединения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...