suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie kann sichergestellt werden, dass die Daten korrekt sind, wenn in Django ORM zwei DMLs gleichzeitig auftreten?

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

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

Ich habe zwei Prozesse: Der eine besteht darin, einen Datensatz basierend auf der maximalen Warteschlange in der Tabelle einzufügen.

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)

Ein weiterer Vorgang besteht darin, 1queue不等于0的每条记录,将queue vom Wert von

abzuziehen
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)

Was mir hier wichtig ist, ist ob diese beiden Prozesse gleichzeitig ablaufen. Zum Beispiel, wenn der nachfolgende Prozess jeden Wert dekrementieren möchte. Gleichzeitig fügt der erste Prozess einen neuen Wert ein. In diesem Fall können einige Fehler auftreten.

Was soll ich tun? Hat jemand eine gute Idee, danke im Voraus.

P粉041881924P粉041881924455 Tage vor570

Antworte allen(1)Ich werde antworten

  • P粉557957970
  • StornierenAntwort