SQLAlchemyError: A transaction is already begun on this Session.

资料

sqlalchemy 事务 - 简书

  • 在 SQLAlchemy 中,事务是通过会话来管理的。当你开始一个事务(例如使用 async with db.begin()),它会开启一个新的事务,并在事务块结束时自动提交或回滚。
  • 如果在同一个会话中,事务还未结束,就再次尝试开始另一个事务,就会抛出 A transaction is already begun on this Session 这个错误。

解决

报错的中文解释是:此会话上已经有一个开始了的事务.

嘛意思呢? 你在同一个数据库会话(Session)中尝试开始一个新的事务,而实际上这个会话已经有一个正在进行中的事务了。

也就是说:你执行的另外一个数据库操作没有完成.

最后通过 :session.in_transaction()方法来找哪里没有关闭

然后找到了

        result = await db.execute(
            select(XXXX).filter(
                ...
            )
        )
        _result = result.scalars().all()

此处开启了一个事务 -_-! (查询也开事务啊?,其实是 .excute()会开启事务)

在需要的地方执行 .commit() 或 .rollback() 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值