簡體   English   中英

在第二個object.create之后Django回滾不起作用

[英]Django rollback not working after second objects.create fails to create a record

這是該視圖的代碼段:

@transaction.atomic()
def insert_in_sample_table(request):
    try:
        with transaction.atomic():
            insert_obj = SampleTable1.objects.create(fld_id=2, fld_name='abc')
            raise Exception ("This is manual exception")
            insert_obj2 = SampleTable2.objects.create(fld_id=1, fld_name='xyz')
        return HttpResponse("SUCCESS")
    except Exception as e:
        return HttpResponse(str(e))

有兩種模型:

  1. SampleTable1
  2. SampleTable2

我在第一次創建后手動引發了一個異常,現在我希望必須撤消在第一個模型(SampleTable1)中所做的更改。 但是不幸的是我看不到回滾

我在settings.py文件的DATABASE中添加了'ATOMIC_REQUESTS': True,

我刪除了

 @transaction.atomic()

並檢查,它仍然不會回滾。

如何使第一個數據庫事務回滾?

您可以使用'@ transaction.atomic'裝飾器,如下所示:

@transaction.atomic
def insert_in_sample_table(request):
    tra = transaction.savepoint()

    try:
         insert_obj = SampleTable1.objects.create(fld_id=2, fld_name='abc')
         insert_obj2 = SampleTable2.objects.create(fld_id=1, fld_name='xyz')

         transaction.savepoint_commit(tra)
         return HttpResponse("SUCCESS")
    except IntegrityError:
         transaction.savepoint_rollback(tra)
         return HttpResponse("DB ERROR")

如果使用多重數據庫,則應指定連接名稱並替換以下行:

with transaction.atomic():

為了這:

with transaction.atomic(using='connection_name'):

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM