同步上下文管理器规则

enter:进入 with 代码块时自动执行(可开启事务);

exit:退出 with 代码块时自动执行,该方法会接收异常类型、异常对象、堆栈信息参数,可判断是否发生异常:无异常则提交事务,出现异常则回滚事务。

python 复制代码
class DBTransaction:
    def __enter__(self):
        # 开启事务
        print("开启数据库事务")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        # exc_type不为None代表出现异常
        if exc_type is None:
            print("无异常,提交事务")
        else:
            print("出现异常,回滚事务")
        # 返回False会向外抛出异常,True则屏蔽异常
        return False

# 使用with管理事务
with DBTransaction():
    print("执行数据库操作...")
    # 若此处抛出异常,__exit__会捕获并回滚
相关推荐
.柒宇.1 小时前
运维常见面试题_02_数据库
运维·数据库·sql·面试
名字还没想好☜9 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
ltl10 小时前
Serverless 数据库弹性理论:Neon 与 Aurora Serverless v2
数据库
一壶浊酒..13 小时前
Scrape Webpack练习
开发语言·javascript·webpack
命运之光13 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光14 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人14 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
marvelyu14 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
ZCBUS实时计算14 小时前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl