SQLAlchemy и явная блокировка

У меня есть несколько процессов, которые потенциально могут вставить дубликаты строк в базу данных. Эти вставки не случаются очень часто (несколько раз в час), поэтому это не критично для производительности.

мы попробовали проверку существования перед выполнением вставки, вот так:

#Assume we're inserting a camera object, that's a valid SQLAlchemy ORM object that inherits from declarative_base...
try:
  stmt = exists().where(Camera.id == camera_id)
  exists_result = session.query(Camera).with_lockmode("update").filter(stmt).first()

  if exists_result is None:
    session.add(Camera(...)) #Lots of parameters, just assume it works
    session.commit()
except IntegrityError as e:
  session.rollback()

Проблема ям в том, чтоexist() проверка не делает• заблокировать таблицу, и поэтому существует вероятность того, что несколько процессов могут попытаться вставить один и тот же объект одновременно. В таком случае один процесс успешно выполняется со вставкой, а другие - с исключением IntegrityError. Хотя это работает, это нене чувствуючистый» мне.

Мне бы очень хотелось, чтобы какой-нибудь способ блокировки таблицы камеры перед выполнениемexists() проверять.

Ответы на вопрос(1)

Ваш ответ на вопрос