在我看来,我在多个模型中保存数据:
% /usr/lib64/naemon/plugins//check_int.pl -H 10.61.146.227 -C sparkred -2 -n bond0 -w -z -f -e -S -k -Y -B
bond0:UP (1717.9Kbps/3854.1Kbps), bond0.1422:UP (19.0Kbps/326.0Kbps) (2 UP): OK | 'bond0_in_bps'=1717881;;; 'bond0_out_bps'=3854092;;; 'bond0.1422_in_bps'=19023;;; 'bond0.1422_out_bps'=325999;;;
如果def myview(request):
#do some processing
model1.save()
model2.save()
引发错误,如何确保回滚model1.save()
。或者只有在两个模型都成功保存后才能提交?
换句话说,"如果save()都成功,只保存model1和model2"
答案 0 :(得分:24)
Atomicity是数据库事务的定义属性。 atomic允许我们创建一个代码块,在该代码块中保证数据库的原子性。 如果代码块成功完成,则更改将提交到数据库。如果存在异常,则会回滚更改。
示例:
from django.db import transaction
with transaction.atomic():
model1.save()
model2.save()
和
from django.db import transaction
try:
with transaction.atomic():
model1.save()
model2.save()
except IntegrityError:
handle_exception()
答案 1 :(得分:1)
使用 decorator 的替代解决方案:
from django.db import transaction
@transaction.atomic
def myview(request):
# This code executes inside a transaction.
model1.save()
model2.save()