django 事务

from django.db import transaction

@transaction.atomic()
def page_trans(request):
""" 事务练习
发布微博 顺便发布一条评论
"""
user = WeiboUser.objects.get(pk=1)
# 发布微博
weibo = Weibo.objects.create(user=user,
content='事务练习')
# 发布评论
comment = Comment.objects.create(user=user,
content='微博评论',
weibo=weibo)

print('weibo:',weibo.pk,';comments:',comment.id)
return HttpResponse('ok');


def page_trans_with(request):
""" 事务练习
发布微博 顺便发布一条评论
"""
with transaction.atomic():
user = WeiboUser.objects.get(pk=1)
# 发布微博
weibo = Weibo.objects.create(user=user,
content='事务练习with')
# 发布评论
comment = Comment.objects.create(user=user,
content='微博评论with',
weibo=weibo)
print('weibo:', weibo.pk, ';comments:', comment.id)
return HttpResponse('ok')


def page_trans_hand(request):
""" 手动控制事务
发布微博 顺便发布一条评论
"""
try:
# 放弃自动提交
transaction.set_autocommit(False)

user = WeiboUser.objects.get(pk=1)
# 发布微博
weibo = Weibo.objects.create(user=user,
content='事务练习hand')
# 手动提交事务
transaction.commit()
# 发布评论
comment = Comment.objects.create(user=user,
content='微博评论hand',
weibo=weibo)
print('weibo:', weibo.pk, ';comments:', comment.id)
except:
# 不使用事务则手动删除数据
# weibo.delete()
# 回滚
transaction.rollback()

return HttpResponse('ok')
posted @ 2019-09-06 12:33  EricBlog  阅读(120)  评论(0编辑  收藏  举报