【问题标题】:How to rollback asyncpg transaction如何回滚 asyncpg 事务
【发布时间】:2021-10-17 19:29:47
【问题描述】:

我正在使用 asyncpg 来执行外部 sql 代码(小型和内部迁移系统)。因此,如果 sql 代码出现错误,我想回滚当前事务中的所有数据库更改。但我无法让事务对象调用回滚()。请帮忙!

我的代码是:

async with conn.transaction():
    try:
        await conn.execute(script)
    except asyncpg.exceptions.PostgresSyntaxError:
        logger('Got exception!')
        # what i have to write here to call rollback!?

非常感谢。

【问题讨论】:

    标签: transactions asyncpg


    【解决方案1】:

    如果在async with conn.transaction(): 部分发生异常,事务会自动回滚。

    但是你可以手动控制流量:

    tr = conn.transaction()
    
    try: 
        await tr.start() 
        await conn.execute('WRONG SQL STATEMENT / DO INTEGRITY ERROR HERE') 
    except Exception as e:
        logger.error('Got exception {}', e)
        await tr.rollback()
    else:
        tr.commit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2012-01-16
      • 1970-01-01
      相关资源
      最近更新 更多