python事务

事务指的是一系列相关的操作,这些操作被看作是一个整体,要么全部执行成功,要么全部执行失败,不能仅仅执行其中的一部分。在计算机科学中,事务是指访问和操作数据库的一组操作。这些操作被视为一个单独的工作单元,并且必须按照完全一致的方式执行,以确保数据库处于一致的状态。

事务被用来确保数据库中数据的一致性和完整性,并且在并发操作中避免数据损坏或丢失。一个事务通常具有四个属性,即ACID:

原子性(Atomicity):一个事务中的所有操作要么全部成功,要么全部失败。如果有任何一个操作失败,那么整个事务都被视为失败,并被回滚到之前的状态。

一致性(Consistency):一个事务开始和结束时,数据库处于一致的状态。在执行过程中可能会有临时的不一致,但是在事务结束时必须保证数据库的一致性。

隔离性(Isolation):各个事务之间是相互隔离的,每个事务的执行都不会被其他事务所干扰。

持久性(Durability):一旦事务提交,其结果就永久保存在数据库中,即使系统故障,也不会丢失。

python事务的使用:

1、django事务

# 事务使用:transaction模块

#
from django.db import transaction
# 开启事务方法1:
@transaction.atomic
def func(request):
    try:
        # 后面的代码就在事务中执行
        print('aaa')
        # 设置事务的保存点
        sid1 = transaction.savepoint()  # 可以设置多个保存点
        sid2 = transaction.savepoint()  # 可以设置多个保存点
    except:
        # 失败的话就回滚
        transaction.savepoint_rollback(sid1)
        transaction.savepoint_rollback(sid2)
    else:
        # 成功的话就提交事务
        transaction.savepoint_commit(sid1)
        transaction.savepoint_commit(sid2)
    finally:
        pass

# 开启事务方法2:
def func(request):
    with transaction.atomic():
        try:
            # 后面的代码就在事务中执行
            print('aaa')
            # 设置事务的保存点
            sid1 = transaction.savepoint()  # 可以设置多个保存点
            sid2 = transaction.savepoint()  # 可以设置多个保存点
        except:
            # 失败的话就回滚
            transaction.savepoint_rollback(sid1)
            transaction.savepoint_rollback(sid2)
        else:
            # 成功的话就提交事务
            transaction.savepoint_commit(sid1)
            transaction.savepoint_commit(sid2)
        finally:
            pass



2、直接使用pymysql开启事务

# 
import pymysql

# 创建连接
conn = pymysql.connect(host='localhost', port=3306,
                       user='root', password='123456', database='test', charset='utf8')
# 获取游标
cursor = conn.cursor()

try:
    # 执行sql语句
    cursor.execute("UPDATE money_table SET money=100 WHERE name=张三 and id_card=123456789101")
    # 错误场景
    X = 1 / 0
    # 向数据库提交
    conn.commit()
except:
    # 发生错误时回滚
    conn.rollback()
else:
    pass
finally:
    # 关闭游标
    cursor.close()
    # 关闭连接
    conn.close()


3、使用sqlalchemy开启事务


try:
    # 执行sql语句
    organization = Organization.query.filter_by(id=organization_id).first()
	organization.name = 'organization_change'
   # 向数据库提交
   db.session.flush() # 将数据提交到数据库服务器,并未提交到事务,可以回滚;并可以获取更新的或者是刚刚添加的数据的id等(或者是想要的该条数据中的某个字段的值)
   
   # 错误场景
    X = 1 / 0
except:
   # 发生错误时回滚
   db.session.rollback()
else:
   db.session.commit() # 将数据提交到数据库服务器,并提交到事务,不能回滚
finally:
    # 完成操作
    print('完成操作')
    

如图是python的事务例子,用到了try语句的用法;如果不清楚try语句的用法,可以看我另一篇文章(try语句的使用),里面有对于此语句的介绍,和简写上面语句的样式。

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值