with transaction.atomic():transaction.commit(tran);transaction.rollback(tran)实例
时间: 2023-09-02 17:05:39 浏览: 52
假设我们有一个简单的 Django 模型 `User`,用于存储用户的姓名和电子邮件地址。我们可以使用 `transaction.atomic()` 上下文管理器来确保多个数据库操作要么全部成功,要么全部失败回滚。
示例代码如下:
```
from django.db import transaction
from myapp.models import User
try:
with transaction.atomic():
# 创建一个新用户
user = User(name='Alice', email='alice@example.com')
user.save()
# 更新现有用户的电子邮件地址
user2 = User.objects.get(id=2)
user2.email = 'bob@example.com'
user2.save()
# 所有数据库操作都成功,提交事务
print('所有操作都成功,提交事务')
except Exception as e:
# 捕获任何异常并回滚事务
print('发生异常,回滚事务')
transaction.rollback()
# 打印异常信息
print(e)
```
在这个例子中,我们使用了 `transaction.atomic()` 上下文管理器来保证创建新用户和更新现有用户的电子邮件地址这两个数据库操作要么全部成功,要么全部失败回滚。如果其中任何一个操作失败,整个事务都将被回滚。如果所有操作都成功,事务将被提交。
注意,在上面的代码中,我们使用了 `try/except` 语句来捕获任何可能的异常,并在发生异常时回滚事务。这是一个很好的实践,因为它可以避免未处理的异常导致事务无法回滚的情况发生。