我对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)
答案 0 :(得分:0)
first argument至ForeignKeyConstaint
应该是本地列的序列,并且the second是引用的外部列的匹配序列。现在,您有2个本地,外部对的列表。
但是:您正在尝试创建一个复合外键约束,该约束引用2个或更多表,在SQL中是不可能的。当您考虑时,很明显为什么:key会跨越多个表吗?
如果适合您的模型,则可以为battle_id
和attacker_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列组成,因此唯一约束是多余的。