Фляга SQLA, удалите один связанный из списка - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть модель пользователя:

class Account(sqla.Model, ExtendMixin, PoliciesMixin):

...
...
 cats = sqla.relationship(
        'Cat',
        sqla.Table(
            'account_cats',
            sqla.Model.metadata,
            sqla.Column(
                'account_id',
                sqla.Integer,
                sqla.ForeignKey('accounts.id')),
            sqla.Column(
                'cat_id',
                sqla.Integer,
                sqla.ForeignKey('cats.id')),
        ), backref='accounts')

Так что account.cats это список кошек.Как я могу удалить одно отношение из account.cats.Например, в системе у меня есть:

Cat:
id: 1

Cat
id: 2

Cat:
id: 3

, затем я устанавливаю всех кошек для пользователя

account = ...
account.cats.add(cat1)
account.cats.add(cat2)
account.cats.add(cat3)

, поэтому я хочу удалить связь с кошкой с идентификатором 2. Эта кошка должна остатьсяв базе данных, но отношения с пользователем должны удалить.Это мой код

for cat in account.cats:
     if 2 == cat.id:
         account.cats.remove(cat)
         sqla.session.commit()

, но у меня есть ошибка (

Транзакция этого сеанса откатилась из-за предыдущего исключения во время сброса. Чтобы начать новую транзакцию с этимСессия, первый выпуск Session.rollback ().

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