python - ArgumentError:无法在表上创建 ForeignKeyConstraint
问题描述
我对 SQLAlchemy 相当陌生,我想知道是否有人可以帮助我破译此错误消息:
错误::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)
解决方案
第一个参数应该ForeignKeyConstaint
是本地列的序列,第二个是引用的外部列的匹配序列。就像现在一样,您有 2 个本地、外国对的列表。
但是:您正在尝试创建一个引用 2 个或更多表的复合外键约束,这在 SQL中是不可能的。仔细想想,原因就很清楚了:什么键会跨越多个表?
如果适合您的模型,您可以改为为battle_id
and创建单独的外键约束: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 列组成,因此唯一约束是多余的。
推荐阅读
- python - 有没有办法使用用户输入来调用函数?
- swift - 未使用正确的值观察到已发布的 var
- excel - 如何使用 VBA 自动调整列宽?
- r - ggplot:geom_text 不在 geom_col 上方打印
- owl - 如何比较OWL中的属性?
- excel - Excel使用求和函数并删除求和数
- mysql - 使用 sidecar 方法将我的 kubernetes 引擎应用程序连接到谷歌云 sql 实例时遇到问题
- python - Pyautogui 函数 locateonscreen 给出属性错误
- java - LWJGL glGenVertexArrays() 正在阻止执行
- r - 将函数应用于随机行的 dplyr'ish 版本