Удаление дочерней сущности без установки parent_id в NULL в SQLAlchemy - PullRequest
0 голосов
/ 19 сентября 2019

Если у нас есть две модели sqlalchemy, где у дочерней модели есть флаг удаления:


class Parent(Base):
    __tablename__ = 'parent'

    id = Column(Integer, primary_key=True)

    children = relationship('Child', primaryjoin='and_(Parent.id==Child.parent_id, not_(Child.is)deleted))')


class Child(Base):
    __tablename__ = 'child'

    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForegnKey('parent.id'), nullable=False)
    is_deleted = Column(Boolean, default=False)

    parent = relationship(Parent)

Когда я удаляю child из parent с:

parent.children.remove(child)

SQLAlchemy устанавливаетchild.parent_id до NULL.Есть ли способ удалить дочерний элемент из списка children родителей, но сохранить parent_id?Прямо сейчас я делаю:

child.is_deleted = True
session.flush()
session.refresh(parent)

, который удаляет child из списка children, но, может быть, есть лучший способ?

1 Ответ

0 голосов
/ 19 сентября 2019

Я так не думаю, пока ваши отношения зависят от Child.parent_id.

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