在 Django 中可以通过django.db.transaction 模块提供的atomic来定义一个事务
atomic提供两种方案实现事务
首先是导包
from from django.db import transaction
调用 atomic 函数
事务函数 atomic 有两种用法:装饰器和 with 用法。
装饰器用法
被atomic装饰的函数将直接作为一个事务执行。
@transaction.atomic
def modify_database():
"""
所有修改数据库的操作作为一个事务,要么都做,要么都不做
"""
pass
with 用法
包含在with语句内部的所有数据库修改操作将作为一个事务一起执行。
with transaction.atomic():
"""
with 内部所有修改数据库的操作作为一个事务,要么都做,要么都不做
"""
pass
提交与回滚
- 保存点
事务保存节点,在事务开始时设置。或设置在一些多分支的节点上。
# 创建保存点
save_id = transaction.savepoint()
- 提交
结束并提交事务。一个事务结束后不要忘了提交到数据库。
# 提交从保存点到当前状态的所有数据库事务操作
transaction.savepoint_commit(save_id)
- 回滚
当出现数据库错误,或需取消某一段的事务时,可以回滚到事务的前一保存节点处。
# 回滚到保存点
transaction.savepoint_rollback(save_id)
评论 (0)