如何将一个表与另外两个具有复合主键的表连接起来?

时间:2020-08-03 12:25:31

标签: python sqlalchemy

我在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 = wtaATP = WTA之外,第二张表是相同的。

我的想法是将两个表中的数据附加到具有新列tour_id的新表中,其中新列0atp1为{{ 1}}。我还将添加一个新的wta列作为主键。

然后我想建立一个追加查询,我需要将两个表之间的关系定义为2x match_id s,如下所示:

ForeignKeyConstraint

这给了我错误:

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)

我有一个偷偷摸摸的怀疑,我不应该在同一个表中有两个约束,但是我在这里没有深度。创建联接的最佳方法是什么?

0 个答案:

没有答案