如何在Python中正确使用MongoDB事务

MongoDB事务仅支持副本集或分片集群,单节点不支持;需显式传入session参数,超时60秒不可配置;writeConcern和readConcern需合理设置以保障一致性。事务只在副本集或分片集群上可用单节点 MongoDB 实例不支持事务,调用 start_transaction() 会直接报错 OperationFailure: Transactions are not supported on this deployment。这是最常卡住新手的第一步。本地开发时,别用 mongod --dbpath 启动单机版,改用 mongod --replSet rs0 并执行 rs.initiate()Docker 中快速起副本集:用官方镜像的 docker-compose.yml 示例,确保包含 replication.replSetName 配置云服务(如 MongoDB Atlas)默认开副本集,但免费共享层(M0)仍不支持事务------得升到 M10 或更高session 必须显式传入每个操作MongoDB Python 驱动不会自动把操作绑定到当前事务上下文,漏传 session 参数等于白开事务:所有写操作会立即提交,回滚完全失效。每次调用 insert_one()、update_one()、delete_many() 等方法时,必须加 session=session聚合管道中用 out 或 merge 写入数据时,同样要传 session;否则写入脱离事务控制读操作默认不参与事务隔离,如需读已写未提交数据,得设 read_concern=ReadConcern("local"),但通常没必要with client.start_session() as session: with session.start_transaction(): collection_a.insert_one({"x": 1}, session=session) # ? 正确 collection_b.update_one({"y": 2}, {"$set": {"z": 3}}, session=session) # ? 正确 collection_a.insert_one({"x": 2}) # ? 没传 session,立刻提交,事务无法回滚它事务有 60 秒超时且不可配置从 start_transaction() 开始计时,超时后服务端自动中止事务并释放锁。不是客户端异常,所以 try/except 捕获不到;表现常是后续操作卡住或报 InvalidSession。避免在事务里做 HTTP 请求、文件读写、长循环等阻塞操作批量操作尽量用 insert_many()、bulk_write() 替代多次单条调用,减少网络往返和时间消耗如果真需要长流程,拆成多个短事务,用业务逻辑保证最终一致性,而不是强依赖单事务writeConcern 影响事务可见性与持久性事务提交时的 writeConcern 决定"成功"意味着什么。默认 w=1(主节点写入即返回),但主节点宕机可能丢数据;设 w="majority" 才能保证多数节点落盘。 橙篇 百度文库发布的一款综合性AI创作工具

相关推荐
装不满的克莱因瓶2 分钟前
了解不同机器学习模型的分类
人工智能·python·算法·机器学习·ai·分类·数据挖掘
我爱吃土豆12 分钟前
Agent 的记忆机制
开发语言·数据库·人工智能
AOwhisky5 分钟前
MySQL 学习笔记(第五期):用户管理与权限控制
linux·运维·数据库·笔记·学习·mysql
梦想的颜色19 分钟前
Redis数据类型全解析:从底层原理到生产实战
运维·数据库·redis·缓存·高并发·分布式锁·数据类型
小江的记录本21 分钟前
【Spring全家桶】Spring Cloud 2023.0.x:配置中心:Nacos Config、Apollo(附《思维导图》+《面试高频考点清单》)
java·spring boot·后端·python·spring·spring cloud·面试
C137的本贾尼26 分钟前
InnoDB 的物理世界:表空间、段、区与页
数据库
JdSnE27zv26 分钟前
EF Code First学习笔记:数据库创建
数据库·笔记·学习
我是一颗柠檬42 分钟前
【Redis】Redis性能优化Day14(2026年)
数据库·redis·性能优化
财经资讯数据_灵砚智能1 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月7日
人工智能·python·ai·信息可视化·自然语言处理·ai编程·灵砚智能
程序员老油条1 小时前
用 AI 生成复杂 SQL:LangChain4j + 本地模型实践
数据库·人工智能·sql