sqlalchemy внешний составной ключ (декларативный) - PullRequest
0 голосов
/ 21 апреля 2020

Я видел множество вопросов, связанных с этой проблемой, но я не могу все исправить.

Я не могу сгенерировать свои таблицы, вот отрывочные версии.

class Member(BASE):
    __tablename__ = "members"
    discord_id = Column(BigInteger, primary_key=True,nullable=False)
    guild = Column(BigInteger, ForeignKey('guilds.discord_id'),primary_key=True)
    rs_runs = relationship("RSRun",secondary='member_on_rs_run')
    # guild = Column(BigInteger, ForeignKey('guilds.discord_id'),primary_key=True)
    __table_args__ = (UniqueConstraint("discord_id","guild"),)

class Guild(BASE):
    __tablename__ = "guilds"
    name = Column(String)
    discord_id = Column(BigInteger, primary_key=True, nullable=False)

class RSRun(BASE):
    __tablename__ = "rs_runs"

    id = Column(Integer, primary_key=True, nullable=False)
    creator = Column(BigInteger, ForeignKey('members.discord_id'))
    members = relationship("Member",secondary='member_on_rs_run')
    guild = Column(BigInteger, ForeignKey("guilds.discord_id"),nullable=False)


class MemberOnRSRun(BASE):
    __tablename__ = "member_on_rs_run"
    member_id = Column(BigInteger, primary_key = True)
    member_guild = Column(BigInteger,primary_key=True)
    run_id = Column(Integer,ForeignKey('rs_runs.id'),primary_key=True)
    __table_args__ = (ForeignKeyConstraint(['member_id', 'member_guild'],[Member.discord_id, Member.guild]),)

Я сталкиваюсь с ошибкой psycopg2.errors.InvalidForeignKey: не существует уникального ограничения, соответствующего данным ключам для "членов" ссылочной таблицы

Однако у меня есть ограничение Unique для этих ключей вместе, и я имею составной ForeignKeyConstraint правильно сгенерирован (я думаю). Я не уверен, что я делаю неправильно.

Таблица MembersOnRSRun предназначена для связи «многие ко многим».

Обратите внимание, что все работало нормально, пока я не добавил таблицу гильдий со столбцами гильдий.

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