Python能不能写一个验证事务效果的样例代码
很多开发者学习MySQL事务的时候只停留在理论层面不知道事务真正生效是什么样子。本文提供两套对照可运行代码无事务产生脏数据、开启事务异常自动回滚。直接运行代码观察数据库数据变化直观验证事务效果。环境准备安装依赖pipinstallpymysql测试表SQL必须使用InnoDB引擎MyISAM不支持事务。CREATETABLEaccount(idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(32)NOTNULL,balanceDECIMAL(12,2)NOTNULLDEFAULT0)ENGINEInnoDBDEFAULTCHARSETutf8mb4;-- 初始化测试数据张三、李四各1000元INSERTINTOaccount(username,balance)VALUES(张三,1000.00),(李四,1000.00);业务场景张三转账200元给李四。流程张三余额扣减200模拟程序抛出异常李四余额增加200案例一不使用事务自动提交产生脏数据pymysql默认autocommitTrue每执行一条SQL就直接写入数据库。当中间代码抛出异常后面SQL无法执行就会出现一部分成功、一部分失败的数据错乱。importpymysqldefdemo_without_transaction():# 默认 autocommitTrueconnpymysql.connect(host127.0.0.1,port3306,userroot,password你的密码,databasetest_db,charsetutf8mb4)cursorconn.cursor()# 1.张三扣200这条SQL立刻生效落库cursor.execute(UPDATE account SET balance balance - %s WHERE username%s,(200,张三))# 模拟业务异常、接口报错、程序崩溃print(模拟程序发生异常)1/0# 2.李四加钱这行代码永远不会执行cursor.execute(UPDATE account SET balance balance %s WHERE username%s,(200,李四))cursor.close()conn.close()if__name____main__:demo_without_transaction()运行现象程序抛出ZeroDivisionError异常终止查询数据库张三余额变成800李四仍然1000出现脏数据钱凭空消失业务逻辑被破坏⚠️复现完成后记得重置表数据方便测试下一个案例。UPDATEaccountSETbalance1000.00;案例二开启事务异常自动回滚关键点设置conn.autocommit False关闭自动提交所有修改操作先在事务缓冲区不会真正写入数据库正常执行完毕调用conn.commit()持久化数据捕获异常调用conn.rollback()撤销全部修改importpymysqldefdemo_with_transaction():connpymysql.connect(host127.0.0.1,port3306,userroot,password你的密码,databasetest_db,charsetutf8mb4)# 关闭自动提交开启事务模式conn.autocommitFalsecursorconn.cursor()try:# 第一步张三扣款cursor.execute(UPDATE account SET balance balance - %s WHERE username%s,(200,张三))# 模拟异常触发回滚逻辑print(模拟程序发生异常)1/0# 第二步李四收款cursor.execute(UPDATE account SET balance balance %s WHERE username%s,(200,李四))# 全部执行成功提交事务数据真正写入数据库conn.commit()print(✅事务提交成功转账完成)exceptExceptionase:# 出现任何异常回滚本次事务所有变更conn.rollback()print(f❌捕获异常事务已全部回滚异常信息{e})finally:cursor.close()conn.close()if__name____main__:demo_with_transaction()运行现象异常分支程序抛出除零异常进入except代码块执行rollback()查询数据库张三、李四余额依旧都是1000数据完全没有变化所有update操作全部撤销不会产生脏数据测试正常提交场景把代码中的1 / 0注释掉再次运行。不会触发异常执行commit()数据库张三800李四1200转账业务正常完成。案例三演示部分回滚SAVEPOINT保存点MySQL支持保存点可以实现事务内部局部回滚不需要全部回滚。importpymysqldefdemo_savepoint():connpymysql.connect(host127.0.0.1,port3306,userroot,password你的密码,databasetest_db,autocommitFalse,charsetutf8mb4)curconn.cursor()try:cur.execute(UPDATE account SET balancebalance-100 WHERE username张三)# 设置保存点sp1cur.execute(SAVEPOINT sp1)cur.execute(UPDATE account SET balancebalance100 WHERE username李四)# 回滚到保存点撤销上面李四加钱操作张三扣钱保留cur.execute(ROLLBACK TO SAVEPOINT sp1)conn.commit()print(保存点演示完成)exceptExceptionase:conn.rollback()print(f异常回滚{e})finally:cur.close()conn.close()对比总结表场景无事务 autocommitTrue开启事务 autocommitFalse程序中途报错部分SQL生效生成脏数据全部操作回滚数据不变程序正常结束逐条SQL立即生效commit之后统一生效开发避坑要点autocommitFalse是开启事务的前提忘记关闭自动提交commit/rollback完全无效。同一个事务内所有SQL必须使用同一个connection对象更换连接代表全新事务。异常分支必须手动执行rollback()否则未提交事务会挂起占用数据库锁资源。表引擎必须是InnoDBMyISAM不支持事务。尽量缩小事务粒度避免长事务长事务会造成锁等待、数据库性能下降。SELECT查询语句不会修改数据不会产生事务变更SELECT ... FOR UPDATE会增加行锁。业务模板订单、库存、转账等多写业务直接套用这套模板conn.autocommitFalsetry:# 多条写sqlconn.commit()exceptException:conn.rollback()finally:conn.close()通过以上样例代码就可以直观验证MySQL事务原子性效果一组操作要么全部成功要么全部撤销。

相关新闻

Python 如何使用 MySQL 的事务

Python 如何使用 MySQL 的事务

后端开发中,转账、订单创建、库存扣减这类业务,必须保证多条数据库操作全部成功或者全部回滚,这就是事务的价值。本文基于 pymysql 讲解 Python 下 MySQL 事务完整用法,包含原理、代码示例、异常处理、常见坑与最佳实践。 环境准备…

2026/8/9 19:54:08 阅读更多 →
ArtboardResizeWithObjects.jsx:终极画板同步缩放解决方案,提升设计效率300%

ArtboardResizeWithObjects.jsx:终极画板同步缩放解决方案,提升设计效率300%

ArtboardResizeWithObjects.jsx:终极画板同步缩放解决方案,提升设计效率300% 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否曾为调整Illustrator画板…

2026/8/9 19:53:07 阅读更多 →
OFDM-MQAM在衰落信道下的性能仿真与分析

OFDM-MQAM在衰落信道下的性能仿真与分析

1. 项目概述:衰落信道下的OFDM-MQAM性能仿真在无线通信系统设计中,信道衰落和噪声干扰是影响传输质量的两大核心挑战。正交频分复用(OFDM)技术通过将高速数据流分散到多个正交子载波上传输,有效对抗多径效应带来的符号间干扰(ISI)。而多进制正…

2026/8/9 19:53:07 阅读更多 →

最新新闻

基于Agentic Workflow的智能邮件助手:从NLP解析到自动化执行的完整实践

基于Agentic Workflow的智能邮件助手:从NLP解析到自动化执行的完整实践

1. 项目概述:从概念到价值的深度解析最近和几个做产品经理和运营的朋友聊天,发现大家普遍有个痛点:每天花在邮件处理上的时间,零零总总加起来能有两三个小时。这还不算那些需要跨工具、跨平台协作的复杂任务,比如收到一…

2026/8/9 20:53:42 阅读更多 →
3步掌握ExplorerPatcher:从界面困扰到高效工作的完整指南

3步掌握ExplorerPatcher:从界面困扰到高效工作的完整指南

3步掌握ExplorerPatcher:从界面困扰到高效工作的完整指南 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 编者按:当Win…

2026/8/9 20:53:42 阅读更多 →
FGO-py终极指南:解放双手的Fate/Grand Order全自动战斗完全手册

FGO-py终极指南:解放双手的Fate/Grand Order全自动战斗完全手册

FGO-py终极指南:解放双手的Fate/Grand Order全自动战斗完全手册 【免费下载链接】FGO-py 自动爬塔! 自动每周任务! 全自动免配置跨平台的Fate/Grand Order助手.启动脚本,上床睡觉,养肝护发,满加成圣诞了解一下? 项目地址: https://gitcode.com/GitHub_Trending/f…

2026/8/9 20:53:42 阅读更多 →
校园二手交易平台开发实战:LBS匹配与智能推荐系统

校园二手交易平台开发实战:LBS匹配与智能推荐系统

1. 项目背景与核心价值校园二手交易平台是解决大学生闲置物品流转的刚需产品。每年毕业季,大量教材、电子产品、生活用品被低价抛售或直接丢弃;而新生入学时又需要采购这些物品。传统贴吧/QQ群的交易方式存在信息杂乱、缺乏担保、难以搜索等问题。我们开…

2026/8/9 20:53:42 阅读更多 →
视觉特征提取器-训练范式02-自监督-掩码图像建模01:MAE的Mask Vector【所有遮挡块复制同一个共享可学习向量】【初始化完全相同,预训练后仍为同一个参数向量】【各位置差异仅由位置编码提供】

视觉特征提取器-训练范式02-自监督-掩码图像建模01:MAE的Mask Vector【所有遮挡块复制同一个共享可学习向量】【初始化完全相同,预训练后仍为同一个参数向量】【各位置差异仅由位置编码提供】

MAE 中的 Mask Vector:从形状、初始化到预训练与推理 1. Mask Vector 到底是什么? 论文《Masked Autoencoders Are Scalable Vision Learners》的核心任务是: 随机删除图片中的大量 patch,只让 Encoder 观察剩余 patch,再让 Decoder 重建被删除的 patch。 MAE 使用一个特…

2026/8/9 20:53:42 阅读更多 →
动态规划解LeetCode摆动序列问题与优化

动态规划解LeetCode摆动序列问题与优化

1. 问题背景与理解第一次看到LeetCode 376题"摆动序列"这个标题时,我脑海中浮现的是一条波浪形的曲线。这道题在动态规划分类中属于中等难度,但实际解题时需要跳出常规思维模式。题目要求我们找出数组中最长的摆动子序列长度,所谓摆…

2026/8/9 20:52:42 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →