Django忽略事务

2024-04-23 10:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在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)。在


Tags: 对象django代码数据库hostdbmymysql
1条回答
网友
1楼 · 发布于 2024-04-23 10:29:08

使用时事务处理.atomic(),应使用参数using='my\u db\u connection'在相关数据库上启动事务:

with transaction.atomic(using='my_db_connection'):

在您的例子中:

^{pr2}$

如果没有提供此参数,Django将使用“默认”数据库连接。在

相关问题 更多 >