SQLA烧瓶,从列表中删除一个相关的

时间:2019-09-24 09:11:32

标签: python sqlalchemy

我有一个用户模型:

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()。

0 个答案:

没有答案
相关问题