17-Django如何开启事务

前置知识

事务的四大特性:ACID
原子性
	- 不可分割的最小单位
一致性
	- 跟原子性是相辅相成
隔离性
	- 事务之间互相不干扰
持久性
	- 事务一旦确认永久生效
	
事务的确认:commit
事务的回滚:rollback

django中开启事务

# 方式1
from django.db import transaction

# 在with代码块内写的所有的orm语句都属于同一个事务
with transaction.atomic():
    # sql1
    # sql2
    # sqln
    ...
print('执行其它操作')
# 方式2
from django.views import View
from django.db import transaction

class Demo(View):
    # 整个post方法都在事务中
    @transaction.atomic()
    def post(self, request):
        ...
# 设置回滚点
sid = transaction.savepoint()
# 事务回滚
# 回滚整个事务  但是不能在自动提交的事务中使用
transaction.rollback()
# 回滚到sid
transaction.savepoint_rollback()
# 事务提交
# 提交整个事务  但是不能在自动提交的事务中使用
transaction.commit()
# 释放保存点 sid ,自保存点被创建依赖执行的更改成为事务的一部分
transaction.savepoint_commit(sid)

配置文件

import psycopg2.extensions

# 根据需要设置隔离级别,如下配置是READ_COMMITTED
# 但是配置PostgreSQL,不能配置mysql,否则会报错
DATABASES = {
    # ...
    'OPTIONS': {
        'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED,
    },
}
posted @ 2024-03-23 00:49  小满三岁啦  阅读(5)  评论(0编辑  收藏  举报