ArgumentError:无法在表上创建ForeignKeyConstraint

时间:2019-02-04 04:52:39

标签: python sqlalchemy

我对SQLAlchemy还是很陌生,我想知道是否有人可以帮助我解密此错误消息:

  

ERROR :: sqlalchemy.exc.ArgumentError:无法在表“ attacker_battles”上创建ForeignKeyConstraint:不存在名为“ battles.battle_id”的列。

它在Battles表中执行的操作。

我的代码:

class Battles(Base):
    __tablename__ = 'battles'
    battle_id = Column(Integer, primary_key=True)
    starttime = Column(DateTime)
    endtime = Column(DateTime)

class Attacker_Battles(Base):
    __tablename__ = 'attacker_battles'
    __table_args__ = (
        ForeignKeyConstraint(
            ['battle_id','battles.battle_id'],
            ['attacker_id','player.player_id']),
        UniqueConstraint('battle_id','attacker_id', 'player_id', name= 'attacking_player_unique_id')
        )
    attacker_id = Column(Integer, primary_key=True)
    battle_id = Column(Integer, primary_key=True)
    player_id = Column(Integer, primary_key=True)

1 个答案:

答案 0 :(得分:0)

first argumentForeignKeyConstaint应该是本地列的序列,并且the second是引用的外部列的匹配序列。现在,您有2个本地,外部对的列表。

但是:您正在尝试创建一个复合外键约束,该约束引用2个或更多表,在SQL中是不可能的。当您考虑时,很明显为什么:key会跨越多个表吗?

如果适合您的模型,则可以为battle_idattacker_id创建单独的外键约束:

class Attacker_Battles(Base):
    __tablename__ = 'attacker_battles'
    attacker_id = Column(Integer, ForeignKey('player.player_id'), primary_key=True)
    battle_id = Column(Integer, ForeignKey('battles.battle_id'), primary_key=True)
    player_id = Column(Integer, primary_key=True)

此外,由于您已定义主键由3列组成,因此唯一约束是多余的。