ArgumentError: Невозможно создать ForeignKeyConstraint для таблицы - PullRequest
0 голосов
/ 04 февраля 2019

Я довольно новичок в SQLAlchemy, и мне интересно, может ли кто-нибудь помочь мне расшифровать это сообщение об ошибке:

ОШИБКА :: sqlalchemy.exc.ArgumentError: Невозможно создать ForeignKeyConstraint для таблицы 'attacker_battles ': столбец с именем' 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 голосов
/ 04 февраля 2019

Первый аргумент - ForeignKeyConstaint должен быть последовательностью локальных столбцов, а второй - последовательностью соответствующих внешних столбцов, на которые ссылаются.В настоящее время у вас есть 2 списка локальных внешних пар.

Но: вы пытаетесь создать составное ограничение внешнего ключа, которое ссылается на 2 или более таблиц, , что невозможно в SQL.Когда вы думаете об этом, становится понятно, почему: какой ключ будет охватывать несколько таблиц?

Вместо этого вы можете создать отдельные ограничения внешнего ключа для 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 столбцов, ограничение уникальности является избыточным.

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