Django 交易无效
Django Transaction did not work
我想在视图引发异常时回滚事务。
我试着按照Django Doc
上的步骤
不过好像不行
这是我的代码:
models.py
class Cargo(models.Model):
serial_number = models.CharField()
name = models.CharField()
views.py
从 django.http 导入 JsonResponse
从 .models 导入货物
def test(request):
cargo = Cargo(serial_number='123456', name='cargo')
cargo.save()
raise Exception()
return JsonResponse({'message': 'ok'})
我在 settings.py.
中打开了 ATOMIC_REQUESTS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'TABLE',
'USER': 'USER',
'PASSWORD': 'PASSWORD',
'HOST': '127.0.0.1',
'PORT': '1234',
'ATOMIC_REQUESTS': True,
}
}
但是每次我访问 test
视图时,它都会引发异常并仍然在我的数据库中添加一个 'cargo' 行。
我想知道如何启用 Django 事务。
谢谢!
还有一个问题,如果我使用 Doc 中描述的 atomic
,例如:
views.py
from django.http import JsonResponse
from django.db import transaction
from .models import Cargo
@transaction.atomic
def test(request):
cargo = Cargo(serial_number='123456', name='cargo')
cargo.save()
raise Exception()
return JsonResponse({'message': 'ok'})
'ATOMIC_REQUESTS': True
还是有必要的。
我现在知道为什么了。
因为我的数据库引擎是 MyISAM,所以 Transaction 没有工作。
用Transaction的人一定要注意DB是否支持!
参考:https://docs.djangoproject.com/en/1.8/topics/db/transactions/#savepoints
好吧,我可能不会告诉你任何你从文档中不知道的新内容,但默认情况下,django 视图在自动提交模式下工作,因此每个查询都会立即保存到数据库中。如果您设置 'ATOMIC_REQUESTS': True
,则无需使用 @transaction.atomic
,因为每个视图都已通过使用 ATOMIC_REQUESTS.
包装在事务中
我想在视图引发异常时回滚事务。
我试着按照Django Doc
上的步骤不过好像不行
这是我的代码:
models.py
class Cargo(models.Model):
serial_number = models.CharField()
name = models.CharField()
views.py
从 django.http 导入 JsonResponse 从 .models 导入货物
def test(request):
cargo = Cargo(serial_number='123456', name='cargo')
cargo.save()
raise Exception()
return JsonResponse({'message': 'ok'})
我在 settings.py.
中打开了ATOMIC_REQUESTS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'TABLE',
'USER': 'USER',
'PASSWORD': 'PASSWORD',
'HOST': '127.0.0.1',
'PORT': '1234',
'ATOMIC_REQUESTS': True,
}
}
但是每次我访问 test
视图时,它都会引发异常并仍然在我的数据库中添加一个 'cargo' 行。
我想知道如何启用 Django 事务。
谢谢!
还有一个问题,如果我使用 Doc 中描述的 atomic
,例如:
views.py
from django.http import JsonResponse
from django.db import transaction
from .models import Cargo
@transaction.atomic
def test(request):
cargo = Cargo(serial_number='123456', name='cargo')
cargo.save()
raise Exception()
return JsonResponse({'message': 'ok'})
'ATOMIC_REQUESTS': True
还是有必要的。
我现在知道为什么了。
因为我的数据库引擎是 MyISAM,所以 Transaction 没有工作。
用Transaction的人一定要注意DB是否支持!
参考:https://docs.djangoproject.com/en/1.8/topics/db/transactions/#savepoints
好吧,我可能不会告诉你任何你从文档中不知道的新内容,但默认情况下,django 视图在自动提交模式下工作,因此每个查询都会立即保存到数据库中。如果您设置 'ATOMIC_REQUESTS': True
,则无需使用 @transaction.atomic
,因为每个视图都已通过使用 ATOMIC_REQUESTS.