Pregunta

Tengo la aplicación de hilos de Python + Postgres. Estoy usando el ORM de Django guardar en Postgres ..
Tengo llamadas guardadas concurrentes. Ocasionalmente, 2 hilos guardan con el misma clave primaria que conduce a un problema.

Registro de Postgres:
ERROR: el valor duplicado de la clave viola la restricción única " store_pkey "
DECLARACIÓN: INSERTAR EN " almacenar " (" store_id " ;, " address ") VALUES (E'HAN277 ', E'101 Ocean Street')

Código:
En el código veo un IntegrityError. Intenté diferentes formas de manejar esta.

a.
    prueba:
        a.save ()
    excepto IntegrityError:
        pasar

Esto causa InternalError

b. Intenté revertir las transacciones ... pero no estoy seguro ... Por lo que a mí respecta entiendo que necesita distinguir guardar llamadas para tener transacciones

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

El primer punto de rescate falla con

AttributeError: el objeto 'NoneType' no tiene el atributo 'cursor'

a. Leí en alguna parte que django no es 100% seguro para subprocesos. Es un buen elección en mi caso de uso. Ya estaba usando Django para otra aplicación y necesito un ORM .. Así que, naturalmente, elegí Django
segundo. Cómo manejar esta situación. Cualquier comentario.

Gracias y saludos, Ramya

¿Fue útil?

Solución

Solo para asegurarse, ¿está usando cadenas para las claves principales si lo entiendo correctamente?

  

AttributeError: el objeto 'NoneType' no tiene el atributo 'cursor'

Esto significa que hay un error en algún código de Python. ¿Has intentado usar otra versión o revisión de Django o buscando el error de Django trac? No es tan raro verse afectado por algún error si está utilizando la versión de troncal.

Como alternativa, también podría intentar implementar Django usando múltiples procesos en lugar de múltiples hilos si esa es una opción.

Sin embargo, es posible que aún desee saber por qué recibe solicitudes duplicadas, ya que podría descubrir algún otro error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top