Как удалить строку в отношении многие ко многим в sqlalchemy? - PullRequest
0 голосов
/ 04 сентября 2018

При попытке удалить строку из таблицы task_details появляется следующая ошибка:

File "D:\My\venv\lib\site-packages\sqlalchemy\orm\relationships.py", line 1785, in _check_cascade_settings
% self)sqlalchemy.exc.ArgumentError: On User.tasks, delete-orphan cascade is not supported on a many-to-many or many-to-one relationship when single_parent is not set.   Set single_parent=True on the relationship().

У меня есть таблица user_details и таблица task_details. между этими двумя отношениями много-много. Существует таблица ассоциации под названием TaskMapping, в которой есть сопоставление user_id и task_id. Вы можете проверить настройки базы данных ниже:

TaskMapping = Table('TaskMapping', Base.metadata,
                   Column('user_id', Integer, ForeignKey('user_details.user_id')),
                   Column('task_id', Integer, ForeignKey('task_details.task_id', ondelete='CASCADE')))


class User(Base):
    __tablename__ = 'user_details'
    user_id = Column(Integer, Sequence('user_id_seq', start=1001, increment=1), primary_key=True)
    user_name = Column(String(250), nullable=False)
    email = Column(String(250), nullable=False)
    tasks = relationship('Tasks', backref='user_details', lazy = 'dynamic',
                         secondary=TaskMapping)


class Tasks(Base):
    __tablename__ = 'task_details'
    task_id = Column(Integer, Sequence('task_id_seq', start=1001, increment=1), primary_key=True)
    description = Column(String(250))
    hrs = Column(Float)
    percent_complete = Column(Float, default=0.0)
    users = relationship('User', backref='task_details', lazy = 'dynamic',cascade="all, delete-orphan",
                         single_parent=True, secondary=TaskMapping)

Я открыт для редизайна схемы.

...