PyMongo 事务回滚

PyMongo 事务回滚PyMongo 事务回滚在许多程序中 我们需要因程序中间报错或终止 需要回滚已经完成的增加 删除 修改等操作 MongoDB 在单主机的情况下 是无法进行回滚操作的 因此 需要先搭建 MongoDB 副本集 可以点击此处查看 Docker 搭建 MongoDBRepli 副本集 连接 MongoDB 副本集的主节点 importpymong 连接 Mongodb 注意此处连接的应该是 MongoDB 副本集的主节点 client pymongo MongoClient 192 16

PyMongo 事务回滚

在这里插入图片描述
在这里插入图片描述

在许多程序中,我们需要因程序中间报错或终止,需要回滚已经完成的增加、删除、修改等操作。MongoDB在单主机的情况下,是无法进行回滚操作的。因此,需要先搭建MongoDB副本集。可以点击此处查看Docker 搭建MongoDB Replication(副本集)。

  1. 连接MongoDB副本集的主节点。
    import pymongo # 连接Mongodb 注意此处连接的应该是MongoDB副本集的主节点 client = pymongo.MongoClient('192.168.1.75', 27017) # 数据库 database = client['Demo'] # 数据表 collection = database['demo'] 
  2. 事务回滚方式一 因异常数据导致程序报错或终止,回滚数据。

    方式一:

    # 创建一个事物会话 默认causal_consistency=True 保持因果一致性 session = client.start_session(causal_consistency=True) # 开启事务会话 session.start_transaction() try: # 正常插入数据 collection.insert_one({ 
         '0': '正常插入数据'}, session=session) # 异常插入数据 collection.insert_one({ 
         0: '异常插入数据'}, session=session) # 抛出一个错误 # raise ValueError('抛出一个错误') except Exception as e: # 操作异常 中断事务 session.abort_transaction() # 输入异常内容 print(e) else: # 操作正常 提交事务 session.commit_transaction() finally: # 关闭事务会话 session.end_session() 

    方式二:

    try: # 创建一个事物会话 默认causal_consistency=True 保持因果一致性 with client.start_session(causal_consistency=True) as session: # 开启事务会话 with session.start_transaction(): # 正常插入数据 collection.insert_one({ 
         '0': '正常插入数据'}, session=session) # 异常插入数据 collection.insert_one({ 
         0: '异常插入数据'}, session=session) # 抛出一个错误 # raise ValueError('抛出一个错误') except Exception as e:. # 输出异常内容 print(e) 

​ 以上两个程序,开始都有一个正常的插入数据,后面都会因为数据异常报错或程序报错导致数据程序停止,事务将会回滚到程序之前的状态,而不会出现程序执行失败,但是却插入了部分数据导致数据错乱。

​ 在程序中对数据进行增加、删除、修改等操作的地方,可以使用MongoDB事务防止因异常数据或程序报错导致数据与执行结果不一致,从而保证程序的一致性。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178204.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午5:47
下一篇 2026年3月26日 下午5:48


相关推荐

  • 想入行3D游戏建模,看我这个你还敢想吗?

    想入行3D游戏建模,看我这个你还敢想吗?所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不会给开的很

    2022年5月12日
    46
  • 通义千问发布 Qwen3-Max-Thinking 模型正式版;月之暗面上线多模态旗舰模型 Kimi K2.5【2026-01-27】

    通义千问发布 Qwen3-Max-Thinking 模型正式版;月之暗面上线多模态旗舰模型 Kimi K2.5【2026-01-27】

    2026年3月12日
    2
  • c++实现skipList「建议收藏」

    c++实现skipList「建议收藏」SkipList是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(logn)平均时间)。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。SkipList可以很好解决有序链表查找特定值的困难。跳表是平衡树的一种替代的数…

    2022年8月30日
    6
  • 360全球首发从安全龙虾智能体到安全龙虾BOX硬件安全龙虾生态全覆盖,目前已接入

    360全球首发从安全龙虾智能体到安全龙虾BOX硬件安全龙虾生态全覆盖,目前已接入

    2026年3月15日
    2
  • java calendar 设置小时_Java Calendar.set 方法设置时间的问题

    java calendar 设置小时_Java Calendar.set 方法设置时间的问题因项目需要,需要遍历一年中的其中几个月,获得每个月的用户数量。变量有:开始时间–startDate,结束时间–endDate。逻辑很简单:获取到开始时间的月份和结束时间的月份,然后得到月份差值,进行for循环遍历,遍历的时候判断用户注册的时间是否在这个月里,然后得出结果。关键就在于:判断用户注册的时间是否在这个月里。想了一个办法:假如一个用户的注册时间是2016-09-0522:05…

    2022年5月26日
    33
  • IIS下图片文件防盗链的办法「建议收藏」

    IIS下图片文件防盗链的办法「建议收藏」IIS不支持UrlRewrite。  所以我们需要通过安装第三方服务器扩展让IIS支持UrlRewrite。  目前有一种产品能比较好地支持IIS的UrlRewrite,名字叫ISAPI_Rewrite。  下载地址在:[url]http://www.helicontech.com/download/[/url]具体的设置方法:修改http.ini文件…

    2022年7月23日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号