Вопрос

У меня есть приложение с резьбой Python + Postgres.Я использую ORM Джанго для сохранения в Postgres ..
У меня есть одновременные вызовы сохранения.Иногда 2 потока сохраняют с тем же первичным ключом, который приводит к проблеме.

Журнал Postgres:
ОШИБКА:повторяющееся значение ключа нарушает уникальное ограничение «store_pkey»
ЗАЯВЛЕНИЕ:Вставьте в «Store» («Store_id», «Адрес») значения (e'han277 ', e'101 Ocean Street')

Код:
В коде я вижу ошибку IntegrityError.Я пробовал разные способы справиться с этим.

а.
пытаться:
а.сохранить()
кроме IntegrityError:
проходить

Это вызывает внутреннюю ошибку

б.Пытался выполнить откат транзакции..но не уверен..Насколько я понимаю, вам нужно различать вызовы, чтобы иметь транзакции

      sid = transaction.savepoint()
      try:
        row.save()
      except IntegrityError, e:
        transaction.savepoint_rollback(sid)
        pass
      transaction.commit()

Первая точка сохранения завершается неудачей с

Ошибка атрибута:Объект «NoneType» не имеет атрибута «курсор».

а.Я где-то читал, что Джанго не является на 100% потокобезопасным.Это хороший выбор в моем использовании.Я уже использовал Django для другого приложения и нуждался в ORM ..Поэтому, естественно, я выбрал Django
б.Как поступить в этой ситуации..Любые комментарии.

Спасибо и с уважением, Рамья

Это было полезно?

Решение

Просто чтобы убедиться, что вы используете строки для первичных ключей, если я правильно понимаю?

Ошибка атрибута:Объект «NoneType» не имеет атрибута «курсор».

Это означает, что в каком-то коде Python есть ошибка.Пробовали ли вы использовать другую версию или ревизию Django или искать в Django свою ошибку?Нередко случается, что на вас влияет какая-то ошибка, если вы используете версию из багажника.

В качестве альтернативы вы также можете попытаться развернуть Django, используя несколько процессов вместо нескольких потоков, если это возможно.

Тем не менее, вы все равно можете выяснить, почему вы получаете повторяющиеся запросы, поскольку это может обнаружить какую-то другую ошибку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top