Django:如何在不引发异常的情况下回滚(@ transaction.atomic)?

Sie*_*yer 7 django

我正在使用Django的命令来执行涉及数据库操作的一些任务:

class SomeCommand(BaseCommand):
    @transaction.atomic
    def handle(self, *args, **options):
        # Some stuff on the database
Run Code Online (Sandbox Code Playgroud)

如果在执行程序期间抛出异常,则@transaction.atomic保证回滚.我可以强制执行此行为而不抛出异常吗?就像是:

# Doing some stuff, changing objects

if some_condition:
    # ABANDON ALL CHANGES AND RETURN
Run Code Online (Sandbox Code Playgroud)

Day*_*Day 13

transaction.set_rollback 可以做到这一点.

class SomeCommand(BaseCommand):
    @transaction.atomic
    def handle(self, *args, **options):
        # Doing some stuff, changing objects
        if some_condition:
            # Return, rolling back transaction when atomic block exits
            transaction.set_rollback(True)
            return
Run Code Online (Sandbox Code Playgroud)

引用文档:

设置回滚标志以True在退出最内层原子块时强制回滚.这可能有助于在不引发异常的情况下触发回滚.