Django原子事务未回滚。

3
我想要做类似这样的事情:
with transaction.atomic():
    Model.objects.create(name="something")
    raise Exception

由于引发了异常,这意味着事务应该回滚并且名称为“something”的模型不应存在。

然而,如果我查询 Model.objects.get(name="something"),该对象仍然存在于数据库中。我是否没有正确理解事务?


1
我测试了你的代码,但是没有得到相同的结果,你使用的是哪个数据库?在你的测试中是空的吗? - Gytree
我目前处于同样的位置,你修好了吗?我正在使用Postgres。 - Zaid Amir
1个回答

2
我最近遇到了同样的问题,原因是我在写入数据库时使用的是一个不同于"default"的数据库。我有一个自定义的数据库路由器,根据请求选择数据库,但读取和写入都发生在同一个数据库上。
注意:在整个请求过程中,我的所有模型都使用同一个数据库。
根据django文档,我们必须通过在using块中提供using="database_alias"来指定要使用的数据库。
database_alias = ... # Get the database alias by using the same logic as in the router
with transaction.atomic(using=database_alias):
    Model.objects.create(name="something")
    raise Exception

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接