J'ai un objet modèle SQLAlchemy qui ressemble à ceci:Comment empêcher les insertions concurrentes de créer des éléments en double?
ResultModelBase = declarative_base()
class Task(ResultModelBase):
"""Task result/status."""
id = sa.Column(sa.Integer, sa.Sequence("task_id_sequence"),
primary_key=True,
autoincrement=True)
task_id = sa.Column(sa.String(255))
Dans deux processus clients distincts, ce code est en cours d'exécution pour créer une nouvelle instance avec un task_id unique, il doit y avoir qu'une seule instance d'un task_id:
task = session.query(Task).filter(Task.task_id == task_id).first()
if not task:
task = Task(task_id)
session.add(task)
session.flush()
Comment puis-je réécrire ce code afin qu'il crée atomiquement une tâche avec l'ID spécifié?
Je préfère quelque chose de plus pratique que cela; pour un, verrouiller quoi? –