#Django事务#
事务实现方式
1:基于装饰器实现
@transaction.atomic
def my_view(request):
?? ?#处理操作
?? ?#操作数据1
?? ?#操作数据2
当HTTP相应码是500,事务回滚
2:使用with语句
? from django.db import transaction
? def my_view(request):
?? ?with transaction.atomic()
?? ??? ?#处理操作
?? ??? ?#操作数据1
?? ??? ?#操作数据2
3:手动处理
? from django.db import connection?
? connection.set_autocommit(False)
? ? try:
? ? ? ? #处理操作
?? ??? ?#操作数据1
?? ??? ?#操作数据2
? ? ? ? connection.commit()
? ? except Exception as e :
? ? ? ? #print("errorrrrrrrr",str(e))
? ? ? ? connection.rollback()
? ? finally:
? ? ? ? connection.set_autocommit(True)
4:全局事务配置文件方式
?DATABASES = {
? ? 'default': {
? ? ? ? 'ENGINE': 'django.db.backends.mysql',
? ? ? ? 'NAME': 'testdb',?
? ? ? ? 'USER': 'root', ?
? ? ? ? 'PASSWORD': '123',?
? ? ? ? 'HOST': '127.0.0.1', ? ??
? ? ? ? 'PORT': 3306, ?
? ? ? ? 'ATOMIC_REQUESTS': True ?# 全局开启事务,和http请求的整个过程绑定在一起
? ? }
}
它是这样工作的:在调用视图方法前,Django 先生成一个事务。如果响应能正常生成,Django 会提交该事务。而如果视图出现异常,Django 则会回滚该事务。
如果你全局开启了事务,你仍然可以使用 non_atomic_requests 装饰器让某些视图方法不受事务控制,但需要注意的是,该装饰器
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!