在原子块中发出rollback()

时间:2016-05-24 23:26:39

标签: django

我尝试更新使用commit_manuallyatomic的代码转到Django 1.7然后1.8但是我遇到了无法rollback的问题而在一个原子块中。问题源于我们在导入例程dry_run中添加的标志。在之前的Django版本@commit_manually允许我们执行以下操作:

 if self.dry_run:
    transaction.rollback()
 else:
    transaction.commit()

如果我尝试在atomic块中执行回滚,则会抛出错误:

  

TransactionManagementError:"当一个' atomic'阻止活动。"

为了实现这一点,我尝试使用set_autocommit

示例:

def do_some_import(self)
  transaction.set_autocommit(False)

  #import routine

  if self.dry_run:
            transaction.rollback()
            transaction.set_autocommit(True)
        else:
            transaction.commit()
            transaction.set_autocommit(True)

但这对任何建议或见解都有误?

1 个答案:

答案 0 :(得分:1)

你试过set_rollback()吗?我想这会解决你的问题。

@transaction.atomic
def do_some_import(self):
    #import routine

    if self.dry_run:
        transaction.set_rollback(True)