事务指的是一系列相关的操作,这些操作被看作是一个整体,要么全部执行成功,要么全部执行失败,不能仅仅执行其中的一部分。在计算机科学中,事务是指访问和操作数据库的一组操作。这些操作被视为一个单独的工作单元,并且必须按照完全一致的方式执行,以确保数据库处于一致的状态。
事务被用来确保数据库中数据的一致性和完整性,并且在并发操作中避免数据损坏或丢失。一个事务通常具有四个属性,即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语句的使用),里面有对于此语句的介绍,和简写上面语句的样式。