cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk memastikan data adalah betul jika dua DML berlaku serentak dalam Django ORM?

Saya Django 项目使用 mysqlInnoDB 引擎。我有一个如下所示的表,queue字段默认值为0

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

Saya mempunyai dua proses, satu ialah memasukkan rekod berdasarkan baris gilir maksimum dalam jadual.

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)

Satu lagi proses ialah menolak 1queue不等于0的每条记录,将queue daripada nilai

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)

Apa yang saya pentingkan di sini ialah sama ada kedua-dua proses ini berlaku serentak. Sebagai contoh, jika proses seterusnya ingin mengurangkan setiap nilai. Pada masa yang sama, proses pertama memasukkan nilai baru. Dalam kes ini, beberapa ralat mungkin berlaku.

Apa yang perlu saya lakukan? Sesiapa sahaja mempunyai idea yang baik, terima kasih terlebih dahulu.

P粉041881924P粉041881924447 hari yang lalu564

membalas semua(1)saya akan balas

  • P粉557957970
  • Batalbalas