django - transaction

 

 

 1 def user_atomic():
 2     User.objects.create(name='purk1', email='pwu1@maxprocessing.com')
 3 
 4     User.objects.create(user_id='purk2', name='purk2', email='pwu2@maxprocessing.com')
 5 
 6     User.objects.create(name='purk3', email='pwu3@maxprocessing.com')
 7 
 8 
 9 @transaction.atomic
10 def user_atomic_decorator():
11     User.objects.create(name='purk1', email='pwu1@maxprocessing.com')
12     
13     User.objects.create(user_id='purk2', name='purk2', email='pwu2@maxprocessing.com')
14 
15     User.objects.create(name='purk3', email='pwu3@maxprocessing.com')
16 
17 
18 @transaction.atomic
19 def user_atomic_decorator_1():
20     User.objects.create(name='purk1', email='pwu1@maxprocessing.com')
21 
22     try:
23         with transaction.atomic():
24             User.objects.create(user_id='purk2', name='purk2', email='pwu2@maxprocessing.com')
25     except Exception as e:
26         e
27     User.objects.create(name='purk3', email='pwu3@maxprocessing.com')
28 
29 @transaction.atomic
30 def user_atomic_decorator_except():
31     User.objects.create(name='purk1', email='pwu1@maxprocessing.com')
32     try:
33         User.objects.create(user_id='purk2', name='purk2', email='pwu2@maxprocessing.com')
34     except Exception as e:
35         e 
36     User.objects.create(name='purk3', email='pwu3@maxprocessing.com') 
atomic

 

user_id 为uuid类型,所以user_id='purk2'肯定会出错,

result:

 

在atomic中错误的使用try except则会抛出TransactionManagementError的异常,同时transaction失效了,没有正常回滚。

用atomic装饰之后,里面的结果就被回滚了,但是用try except包裹的atomic不会影响外层的transaction回滚

转载于:https://www.cnblogs.com/Purk/p/5502652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值