У меня есть модель пользователя:
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 ().