Python 如何使用 MySQL 的事务
后端开发中转账、订单创建、库存扣减这类业务必须保证多条数据库操作全部成功或者全部回滚这就是事务的价值。本文基于 pymysql 讲解 Python 下 MySQL 事务完整用法包含原理、代码示例、异常处理、常见坑与最佳实践。环境准备安装 pymysqlpipinstallpymysql注意MySQL 只有 InnoDB 引擎支持事务MyISAM 不支持事务。测试表准备CREATETABLEaccount(idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(32)NOTNULL,balanceDECIMAL(12,2)NOTNULLDEFAULT0)ENGINEInnoDBDEFAULTCHARSETutf8mb4;INSERTINTOaccount(username,balance)VALUES(zhangsan,1000.00),(lisi,1000.00);什么是事务事务是一组SQL操作的逻辑单元全部执行成功执行commit()提交修改永久生效任意步骤失败执行rollback()回滚撤销这一组所有修改。ACID四大特性原子性(Atomicity)事务内操作不可分割全部成功或全部失败。一致性(Consistency)事务执行前后业务数据保持合法状态。隔离性(Isolation)多个事务之间互相隔离受事务隔离级别控制。持久性(Durability)commit提交之后修改永久保存数据库宕机也不会丢失。pymysql事务核心要点pymysql 默认autocommitTrue每条SQL执行后立即提交此时没有事务效果。使用事务必须关闭自动提交conn.autocommit(False)。两个关键方法conn.commit()提交事务conn.rollback()回滚事务同一个事务必须使用同一个connection连接对象不能换连接。示例1转账业务try‑except标准写法张三转账200元给李四模拟业务异常回滚。importpymysqldeftransfer():connpymysql.connect(host127.0.0.1,port3306,userroot,passwordxxx,databasetest_db,charsetutf8mb4)# 关闭自动提交开启事务模式conn.autocommit(False)cursorconn.cursor(pymysql.cursors.DictCursor)try:# 1. 张三扣200cursor.execute(UPDATE account SET balance balance - %s WHERE username %s,(200,zhangsan))# 2. 模拟异常触发回滚# 1 / 0# 3. 李四加200cursor.execute(UPDATE account SET balance balance %s WHERE username %s,(200,lisi))# 全部成功提交事务conn.commit()print(事务提交成功)exceptExceptionase:# 出现任何异常回滚所有变更conn.rollback()print(f事务回滚异常{e})finally:cursor.close()conn.close()if__name____main__:transfer()打开代码中1/0模拟报错你会发现两条update全部失效不会出现张三扣钱、李四没加钱的数据错乱。示例2with上下文管理器用法pymysql 的 connection 支持 with退出上下文如果没有commit会自动回滚。importpymysqldeftransfer_with():connpymysql.connect(host127.0.0.1,userroot,passwordxxx,databasetest_db,autocommitFalse,charsetutf8mb4)try:withconn.cursor(pymysql.cursors.DictCursor)ascur:cur.execute(UPDATE account SET balancebalance-%s WHERE username%s,(100,zhangsan))cur.execute(UPDATE account SET balancebalance%s WHERE username%s,(100,lisi))# with游标结束不会自动commit需要手动提交conn.commit()print(提交成功)exceptExceptionase:conn.rollback()print(f回滚{e})finally:conn.close()⚠️重要提醒with cursor()只是管理游标不会自动commit/rollback事务的提交回滚仍然由connection控制。示例3嵌套事务MySQL没有真正嵌套事务MySQL InnoDB 不支持真正嵌套事务可以使用保存点 savepoint实现局部回滚。defsavepoint_demo():connpymysql.connect(host127.0.0.1,userroot,passwordxxx,databasetest_db,autocommitFalse)curconn.cursor()try:cur.execute(UPDATE account SET balancebalance-50 WHERE usernamezhangsan)# 设置保存点cur.execute(SAVEPOINT sp1)cur.execute(UPDATE account SET balancebalance50 WHERE usernamelisi)# 回滚到保存点sp1只撤销后面的操作前面的保留cur.execute(ROLLBACK TO SAVEPOINT sp1)conn.commit()exceptExceptionase:conn.rollback()print(e)finally:cur.close()conn.close()常见踩坑清单autocommit忘记关闭autocommitTrue时每一条SQL直接生效commit/rollback完全无效事务失效。事务中途更换connection对象同一个事务的多条SQL必须在同一个连接换连接等于新开另一个事务。查询不会加锁update/delete才会产生事务变更普通select不会修改数据SELECT ... FOR UPDATE会开启行锁用于并发扣库存场景。异常捕获后忘记rollback如果发生异常不执行rollback未提交的事务会一直挂起占用数据库锁资源产生锁等待。MyISAM引擎使用事务MyISAM不支持事务commit/rollback调用无效果建表必须指定ENGINEInnoDB。长事务事务不要长时间不commit/rollback长事务会大量占用回滚段、锁资源严重影响数据库性能。结合SELECT FOR UPDATE并发扣库存场景悲观锁示例防止并发超卖defdeduct_stock():connpymysql.connect(host127.0.0.1,userroot,passwordxxx,databasetest_db,autocommitFalse)curconn.cursor()try:# for update 行锁其他事务会阻塞此处cur.execute(SELECT balance FROM account WHERE usernamezhangsan FOR UPDATE)rowcur.fetchone()ifrow[0]100:cur.execute(UPDATE account SET balancebalance-100 WHERE usernamezhangsan)conn.commit()exceptExceptionase:conn.rollback()print(e)finally:cur.close()conn.close()最佳实践总结业务涉及多写操作必须使用事务设置autocommitFalse。使用try‑except‑finally异常分支必须执行rollback()最后关闭连接。事务粒度尽量小避免长事务执行完尽快commit或rollback释放锁。并发场景需要锁时合理使用SELECT ... FOR UPDATE悲观锁或业务层乐观锁。确认表引擎为InnoDB。一个事务全程复用同一个数据库连接对象。如果你使用 SQLAlchemy ORM框架会封装事务逻辑但底层依然是MySQL事务机制。

相关新闻

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 阅读更多 →
如何高效集成嵌入式AI表情系统:实战指南与架构解析

如何高效集成嵌入式AI表情系统:实战指南与架构解析

如何高效集成嵌入式AI表情系统:实战指南与架构解析 【免费下载链接】xiaozhi-esp32 An MCP-based chatbot | 一个基于MCP的聊天机器人 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 在嵌入式AI交互设备中,为冰冷的硬件注入生…

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

最新新闻

如何在5分钟内搭建一个专业级Web POS系统:从零到上线的实战演练

如何在5分钟内搭建一个专业级Web POS系统:从零到上线的实战演练

如何在5分钟内搭建一个专业级Web POS系统:从零到上线的实战演练 【免费下载链接】NexoPOS Laravel-based web POS system with Vue.js, Tailwind CSS, inventory management, sales processing, customer records, reports, and modular extension support. 项目地…

2026/8/9 20:54:42 阅读更多 →
工业X-ray图像增强算法实战:从CLAHE到Retinex的微米缺陷检测

工业X-ray图像增强算法实战:从CLAHE到Retinex的微米缺陷检测

在工业检测领域,尤其是高精度制造与半导体封装行业,如何从海量的X-ray或工业CT图像数据中,快速、精准地识别出微米级的缺陷,一直是困扰工程师的难题。传统的图像处理方法在面对噪声、低对比度、复杂背景时往往力不从心&#xff0c…

2026/8/9 20:54:42 阅读更多 →
基于Simulink的UPFC建模与VSC控制技术详解

基于Simulink的UPFC建模与VSC控制技术详解

1. 项目概述在电力系统柔性交流输电(FACTS)领域,统一潮流控制器(UPFC)作为最复杂的串联-并联复合型装置,其建模与仿真一直是研究难点。本项目基于VSC(电压源换流器)拓扑结构&#xf…

2026/8/9 20:54:42 阅读更多 →
如何为Linux音频工作站搭建专业插件生态:LSP插件项目深度解析

如何为Linux音频工作站搭建专业插件生态:LSP插件项目深度解析

如何为Linux音频工作站搭建专业插件生态:LSP插件项目深度解析 【免费下载链接】lsp-plugins Linux Studio Plugins Project 项目地址: https://gitcode.com/gh_mirrors/ls/lsp-plugins LSP插件项目是一个专为Linux音频工作站设计的开源插件集合,支…

2026/8/9 20:54:42 阅读更多 →
如何高效使用SMUDebugTool:AMD Ryzen硬件调试与优化的完整指南

如何高效使用SMUDebugTool:AMD Ryzen硬件调试与优化的完整指南

如何高效使用SMUDebugTool:AMD Ryzen硬件调试与优化的完整指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…

2026/8/9 20:54:42 阅读更多 →
基于Agentic Workflow的智能邮件助手:从NLP解析到自动化执行的完整实践

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

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

2026/8/9 20:53: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 阅读更多 →