我尝试在Django中使用transaction。似乎django忽视了这一点。如果块中有异常,我希望事务将被回滚并且数据库不会被更改。但是,当我以后查询数据库时,它会发生变化。在
我所有的表都是InnoDB。mysql shell中的事务可以完美地工作。在
Python2.7.5+、mysql 5.5.54、django 1.8.7。在
这是我的测试代码:
Django设置:
DATABASES = {
'my_app': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my_db',
'USER': ROOT_USER,
'PASSWORD': ROOT_PASS,
'HOST': ROOT_HOST,
'PORT': '3306',
}
}
代码:
^{pr2}$预期的结果是该对象在执行后将不在DB中。 真正的结果是帐户是在DB中创建的,尽管有一个例外。在
更重要的是:在调试代码时,在'raise'行中断时,我可以在DB中看到新对象(使用workbench)。在
使用时事务处理.atomic(),应使用参数using='my\u db\u connection'在相关数据库上启动事务:
在您的例子中:
^{pr2}$如果没有提供此参数,Django将使用“默认”数据库连接。在
相关问题 更多 >
编程相关推荐