django - perform_create 后 Django 回滚事务
问题描述
我正在尝试将 transaction.atomic 与 django 一起使用,但没有任何运气我知道我做错了什么,但我不知道是什么。
class SnapshotView(BaseViewSet):
serializer_class = SnapshotSerializer
@transaction.atomic
def perform_create(self, serializer):
# this will call serializer.save()
snapshot = snapshot = super().perform_create(serializer)
# this will run some code can raise an exception
SnapshotServices.create_snapshot(snapshot=snapshot,
data=serializer.initial_data)
创建新快照的第一个方法将通过第二个将引发但我仍然可以在数据库中看到我的快照实例,这是为什么呢?我在事务块中并且出现故障,django 不应该回滚吗?
第二种方法会抛出一个自定义异常,我阅读了文档,似乎我做的一切都是正确的。
解决方案
我想通了。我的问题是django在原子中使用时使用默认数据库是无。因为我使用的是不同的数据库,所以我只是将 using 添加到我的装饰器 transaction.atomic(using=MYDB) 中,这解决了我的问题。
推荐阅读
- mysql - docker 中的 MySQL 不会保留对已配置卷的更改
- bash - 将 bash 计时器附加到文件
- javascript - 动作是未定义的或不可见的,即使它看起来写得正确
- heroku - Heroku 和 axios
- google-maps-api-3 - 如何通过再次单击标记关闭打开的谷歌地图信息窗口
- python - 如何在 Matplotlib 中获取散点图的最小(或最大)边界
- c# - 使用 GetType().GetTypeInfo().GetDeclaredProperty 为现有属性设置值时 C# 参考错误
- python - Pandas 数据框和字典的深拷贝
- socket.io - 使用分子运行程序而不是 ServiceBroker 将分子 io 与分子网络集成的示例?
- c++ - 为什么每次执行时函数的地址都不同?