搜尋

首頁  >  問答  >  主體

如果Django ORM中同時發生兩個DML,如何確保資料正確?

我的 Django 專案使用 mysqlInnoDB 引擎。我有一個如下所示的表,queue欄位預設值為0

#
class Task(models.Model):
    task_id = models.CharField(max_length=32, primary_key=True)
    queue = models.IntegerField(default=0)

我有兩個過程,一個是根據表中的最大隊列插入一筆記錄。

max_queue = Task.objects.all().annotate(data=Max('queue')).values('data')
 queue_number = max_queue[0]['data'] + 1
 record = {'task_id':task_id, 'queue': queue_number}
 Task.objects.create(**record)

另一個過程是,對於queue不等於0的每筆記錄,將queue的值減1

query_list = Task.objects.filter(~Q(task_queue=0))
for query in query_list:
    Task.objects.filter(task_id=task_id).update(queue=query.queue - 1)

這裡我關心的是這兩個過程是否同時發生。例如,如果後面的過程要遞減每個值。同時,第一個進程插入一個新值。在這種情況下,可能會出現一些錯誤。

我該怎麼做?任何人有個好主意,提前謝謝。

P粉041881924P粉041881924454 天前569

全部回覆(1)我來回復

  • P粉557957970
  • 取消回覆