41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
class TransactionContext:
|
||
"""
|
||
事务上下文管理器类(异步版本)
|
||
支持异步事务管理,配合异步Db类使用
|
||
"""
|
||
|
||
def __init__(self, db_instance):
|
||
"""
|
||
初始化事务上下文管理器
|
||
|
||
Args:
|
||
db_instance: 异步Db实例
|
||
"""
|
||
self.db = db_instance
|
||
self.session = None
|
||
|
||
async def __aenter__(self):
|
||
"""
|
||
进入异步上下文时创建会话
|
||
"""
|
||
self.session = await self.db.get_session()
|
||
return self.session
|
||
|
||
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
||
"""
|
||
退出异步上下文时提交或回滚事务
|
||
"""
|
||
try:
|
||
if exc_type is None:
|
||
# 如果没有异常,提交事务
|
||
await self.session.commit()
|
||
else:
|
||
# 如果有异常,回滚事务
|
||
await self.session.rollback()
|
||
finally:
|
||
# 无论如何都关闭会话
|
||
if self.session:
|
||
await self.session.close()
|
||
|
||
# 返回False表示不抑制异常
|
||
return False |