我有三个数据库,希望在一个请求中以事务的方式向它们添加数据。
例如我的代码:
@transaction.commit_manually
def my_view(request):
try:
MyModel_one(...).save(using='default')
MyModel_two(...).save(using='db_one')
MyModel_three(...).save(using='db_two') # <-- for example we make exception here (duplicate data)
except IntegrityError:
transaction.rollback()
transaction.rollback(using='db_one')
transaction.rollback(using='db_two')
return ...
transaction.commit()
transaction.commit(using='db_one')
transaction.commit(using='db_two')
return ...
结果:
- MyModel_one — 数据未保存
- MyModel_two — 数据已保存(我不知道为什么)
- MyModel_three — 数据未保存,因为出现了希望的错误
问题:为什么事务在这里没有起作用?我该怎么做才能让事务生效?
(我尝试使用其他方法,但没有成功的结果。 (同时,我明白这不是优美的代码,但它非常简单,可以理解问题)
Django 1.7.7 Python 2.7
数据库: default — postgres db_one — mysql db_two — mysql
MyModel_three(...).save(using='db_two')
这一行中,就像在原始问题中一样),它似乎会起作用。如果在将事务提交到db_one
时引发异常,则如您所说,db_two
已经提交。处理这个问题更难,我没有解决方案。 - Alasdair