Aplicativo rosqueado + IntegrityError
-
06-07-2019 - |
Pergunta
Eu tenho um aplicativo encadeado do python + postgres. Estou usando o Django's Orm para salvar no Postgres.
Eu tenho chamadas de salvamento simultâneas. Ocasionalmente, 2 threads salvam com a mesma chave primária que leva a um problema.
Log Postgres:
Erro: o valor da chave duplicado viola a restrição exclusiva "store_pkey"
Declaração: Inserir em "Store" ("store_id", "endereço") valores (e'han277 ', E'101 Ocean Street')
Código:
No código, vejo um IntegrityError. Eu tentei maneiras diferentes de lidar com isso.
uma.
tentar:
A.Save ()
Exceto IntegrityError:
passar
Isso causa o InternError
b. Tentei fazer a transação reverter .. mas não tenho certeza .. até onde eu entendo, você precisa para salvar chamadas para ter transações
sid = transaction.savepoint()
try:
row.save()
except IntegrityError, e:
transaction.savepoint_rollback(sid)
pass
transaction.commit()
O primeiro salvamento falha com
AttributeError: o objeto 'nonType' não tem atributo 'cursor'
uma. Eu li em algum lugar que o Django não é 100% seguro. É uma boa escolha na minha USECASE. Eu já estava usando o django para outro aplicativo e preciso de um orm .. então naturalmente eu escolhi o django
b. Como lidar com essa situação .. qualquer comentário.
Obrigado e cumprimentos, Ramya
Solução
Só para ter certeza, você está usando strings para chaves primárias se eu entender corretamente?
AttributeError: o objeto 'nonType' não tem atributo 'cursor'
Isso significa que há um erro em algum código Python. Você já tentou usar outra versão ou revisão do Django ou pesquisar o Django Trac quanto seu bug? Não é tão incomum ser afetado por algum bug se você estiver usando a versão do tronco.
Como alternativa, você também pode tentar implantar o Django usando vários processos em vez de vários threads, se isso for uma opção.
No entanto, você ainda pode descobrir por que está recebendo solicitações duplicadas, pois isso pode descobrir algum outro bug.