如何回滚异步事务

How to rollback asyncpg transaction

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

我的代码是:

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!?

非常感谢。

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