同步上下文管理器规则

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__会捕获并回滚
相关推荐
老木避暑研究所4 分钟前
从原始数据到洞察:一次完整的避暑房环境数据采集、清洗与可视化分析
java·开发语言
程序喵大人18 分钟前
【C++入门】编译链接模型 - 05 ODR 为什么会让重复定义变成工程炸点
开发语言·c++·编译链接·odr
禾小西20 分钟前
06丨Redis 数据同步:主从库如何实现数据一致?
数据库·redis·php
weixin1997010801627 分钟前
《淘宝TOP API:落地方案、接口边界与业务踩坑 —— 聚石塔内外价差 10 倍的真相》(附 Python 源码)
开发语言·python
前端 贾公子28 分钟前
LangGraph == 图的状态(State)管理 (上)
java·开发语言·数据库
薛晓刚37 分钟前
PGA 超限的一次应急处置:扩容、清游标、杀会话
数据库
CJi0NG44 分钟前
【自用】MySQL-事务
数据库·mysql
xuxigifxfh1 小时前
牛客:HJ170 01序列
java·开发语言·算法·华为机考
我不会插花弄玉1 小时前
4.string类型【由浅入深-redis】
数据库·redis·缓存
朝朝辞暮i1 小时前
C++ 第 33 课:事件循环——spin() 到底在干什么
开发语言·c++·算法