Алхимия SQL удаляет связь между многими - PullRequest
0 голосов
/ 25 января 2019

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

Моя проблема проста: у меня есть таблица со связью «многие ко многим».Там, где у пользователей много рабочих пространств, и у рабочих пространств много пользователей.

invitations_table = db.Table('invitations', db.Model.metadata,
    db.Column('user_id', db.Integer, db.ForeignKey('user.id', ondelete='cascade'), primary_key=True),
    db.Column('workspace_id', db.Integer, db.ForeignKey('workspace.id', ondelete='cascade'), primary_key=True)

)

Теперь мои два класса объявлены так:

class Workspace(db.Model):

   id           = db.Column(db.Integer, primary_key = True)
...
   u_invited       = db.relationship("User",
       secondary       = invitations_table,
       cascade         = 'all',
       back_populates  = "w_invited")

class User(db.Model):
   id           = db.Column(db.Integer, primary_key = True)
 ...
   w_invited    = db.relationship("Workspace",
        secondary       = invitations_table,
        back_populates  = "u_invited")

Теперь, если я удалюВ моей рабочей области я также не могу каскадно удалить удаление в ассоциативной таблице:

   def delete_all_workspace(self):
       workspace = Workspace.query.filter_by(owner=self)

    # for w in  workspace.all():
    #       w.u_invited.clear()

       succeed = workspace.delete()
       db.session.commit()

Проблема заключается в следующем: мне нужно, как некоторые люди предлагают, вручную зацикливаться на моем списке объектов, затем вызывать clear (), чтобы не получить это исключение:

sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) update or delete on table "workspace" violates foreign key constraint "invitations_workspace_id_fkey" on table "invitations"
DETAIL:  Key (id)=(142) is still referenced from table "invitations".

Хотя ondelete = 'cascade' достаточно, чтобы sqlalchemy также удалила ассоциативную таблицу, но она работает не так, как ожидалось.

Мой вопрос: есть ли способ заставить SQLAlchemy также очищать приглашения ассоциативных таблиц, не обременяя их очистку вручную?

Спасибо за ваши ответы

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