PyMongo 事务回滚

该博客介绍了如何在Python的PyMongo库中使用事务进行数据操作,以确保在出现异常时能进行回滚,保持数据一致性。通过示例展示了两种事务回滚的方法:一种是手动管理事务,另一种是使用上下文管理器。在MongoDB副本集中,事务提供了回滚功能,避免了因错误插入或更新导致的数据混乱。
摘要由CSDN通过智能技术生成

PyMongo 事务回滚

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

import pymongo
# 连接Mongodb 注意此处连接的应该是MongoDB副本集的主节点
client = pymongo.MongoClient('192.168.1.75', 27017)
# 数据库
database = client['Demo']
# 数据表
collection = database['demo']

事务回滚方式一 因异常数据导致程序报错或终止,回滚数据。
方式一:

# 创建一个事物会话 默认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事务防止因异常数据或程序报错导致数据与执行结果不一致,从而保证程序的一致性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值