В SQLAlchemy можно предотвратить (или специально вызвать пользовательское исключение) удаление объекта, являющегося частью коллекции, в отношении «многие ко многим».
Например, ниже у меня есть Party
и Person
. У любого Party
может быть много Persons
, а у любого Person
может быть много Parties
.
Если Person
записан как идущий к одному или нескольким Parties
, я хочу запретить удаление Person
.
party_person_ass_table = db.Table('party_person', db.Model.metadata,
db.Column('party_id', db.ForeignKey('party.id'), primary_key=True),
db.Column('person_id', db.ForeignKey('person.id'), primary_key=True))
class Party(db.Model):
...
people = db.relationship('Person', secondary=party_person_ass_table, back_populates='parties')
class Person(db.Model):
...
parties = db.relationship('Party', secondary=party_person_ass_table, back_populates='people')
При чтении документов автоматически устанавливается каскадное удаление из вторичной таблицы (https://docs.sqlalchemy.org/en/13/orm/basic_relationships.html). Интересно, будет ли решение для генерации IntegrityError
добавить nullable=False
к столбцу person_id
в вторичной ассоциации, а затем каким-то образом предотвратить каскадное удаление от воздействия на вторичную таблицу?