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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top