Я пытаюсь установить отношение в SQLAlchemy для удаления таблицы в каскаде при удалении родительской таблицы.
Проблема в том, что моя структура базы данных немного неловкая, и sqlalchemy это совсем не нравится.
Вот немного взглянем на это:
class Project(Base):
__tablename__ = 'project'
prj_id = sqla.Column(sqla.INTEGER, primary_key=True)
name = sqla.Column(sqla.String)
# Tariff used by project
t_id = sqla.Column(sqla.INTEGER, sqla.ForeignKey("tariff.t_id"))
# Tariff created by project
tariff = relationship("Tariff", cascade="all, delete-orphan", foreign_keys=[prj_id])
class Tariff(Base):
__tablename__ = "tariff"
t_id = sqla.Column(sqla.INTEGER, primary_key=True)
name = sqla.Column(sqla.String)
prj_id = sqla.Column(sqla.INTEGER, sqla.ForeignKey("project.prj_id"))
Чтобы объяснить это немного, моя таблица Project использует тариф, с другой стороны, моя таблица Tariff может быть создана внутри проекта. Проект может создать тариф и использовать другой, а тариф может быть создан вне любого проекта.
Ошибка в SQLAlchemy:
sqlalchemy.exc.NoForeignKeysError: Не удалось определить условие соединения между родительскими / дочерними таблицами в отношении Project.tariff - нет внешних ключей, связывающих эти таблицы.
Но я уверен, что prj_id - это внешний ключ Тарифа, верно?
Эта структура может быть немного неуклюжей, но можно ли заставить ее работать с sqlalchemy или мне нужно ее немного изменить?