You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SqlAlchemy AsyncSession上下文管理器时如何消除回滚协程未等待警告?

解决SQLAlchemy AsyncSession事务异常时的RuntimeWarning问题

当使用AsyncSession.begin()作为上下文管理器抛出异常时,出现RuntimeWarning: coroutine 'Transaction.rollback' was never awaited警告,核心原因是事务的回滚协程未被正确执行。以下是两种可行的解决方式:

方案一:嵌套会话与事务的上下文管理器

确保会话本身被async with管理,再开启事务,异常发生时回滚操作会被自动处理:

async with session:
    async with session.begin():
        retailer: model.Retailer = (await session.scalars(select(model.Retailer).filter(model.Retailer.name=="default"))).first()
        await session.execute(insert(model.Contact).values(mock_contact(retailer.uuid)))
        raise RuntimeError()

方案二:显式手动回滚事务

捕获异常后显式调用await transaction.rollback(),确保回滚协程被执行:

async with session.begin() as transaction:
    try:
        retailer: model.Retailer = (await session.scalars(select(model.Retailer).filter(model.Retailer.name=="default"))).first()
        await session.execute(insert(model.Contact).values(mock_contact(retailer.uuid)))
        raise RuntimeError()
    except Exception:
        await transaction.rollback()
        raise

另外,如果你的SQLAlchemy版本低于1.4.30,建议升级到最新稳定版——旧版本存在异步事务上下文管理器的已知bug,升级后也能消除该警告。

内容的提问来源于stack exchange,提问作者Hossein Gholami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:20:57