Django事务使用multi-db

时间:2015-08-10 20:03:01

标签: python django django-models django-orm

我有三个数据库,我想在一个请求中向事务中添加数据。

例如我的代码。

EXEC EDOC_RETRIEVE_S2 '','','','','','',0,'pls,I,cant','',''

结果:

  1. MyModel_one - 数据未保存
  2. MyModel_two - 保存数据(我不明白为什么)
  3. MyModel_three - 数据没有保存,因为希望错误
  4. 问题:为什么交易在这里不起作用?我该怎么做才能获得工作交易?

    (我尝试使用其他方式,但没有取得成功) (我也理解它不是很好的代码,但对于理解这个问题非常简单)

    Django 1.7.7 Python 2.7

    数据库: 默认 - postgres db_one - mysql db_two - mysql

1 个答案:

答案 0 :(得分:2)

Django 1.6中的transaction.commit_manually装饰器was deprecated。您应该切换到Django的新事务管理。

我认为您不需要手动提交事务,您可以嵌套transaction.atomic

def my_view(request):
    try:
        with transaction.atomic(using='default'):
            with transaction.atomic(using='db_one'):
                with transaction.atomic(using='db_two'):
                    MyModel_one(...).save(using='default')
                    MyModel_two(...).save(using='db_one')
                    MyModel_three(...).save(using='db_two') # raises exception
    except IntegrityError:
        return ...
    return ...