我有一个用户模型:
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)
所以,我想删除ID为2的猫的关系。这只猫必须留在数据库中,但必须删除与用户的关系。这是我的代码
for cat in account.cats:
if 2 == cat.id:
account.cats.remove(cat)
sqla.session.commit()
但是我有一个错误(
由于先前的会话,此会话的事务已回滚 刷新期间发生异常。要通过此会话开始新的交易, 第一期Session.rollback()。