Pregunta

Tengo un relativamente simple aplicación de Django, con un uso bastante pesado que se encarga desde hace bastante concurrencia en las operaciones db.

Tengo un modelo Post con un M2M a un modelo de etiqueta.

Una sola línea en mi código, p.add(t) está causando repetidamente excepciones MySQL (donde p es una instancia de Correos y t es una instancia de la etiqueta.)

IntegrityError: (1062, "Duplicate entry '329051-1827414' for key 'post_id'")

Cuando esto se eleva puedo ejecutar manualmente este p.add(t) con éxito, por lo que debe tener que ver con un estado peculiar que el db / app se encuentre en el momento de la ejecución normal. Sucede aproximadamente una vez cada 1000 intentos tag-añadiendo, sin ningún patrón que puedo detectar (es decir, ambos números en el "329.051-1.827.414" par del cambio ejemplo)

A CHECK TABLE en mysql en la tabla muestra pertinentes que son todos aparentemente bien.

¿Alguna idea?

¿Fue útil?

Solución

Por lo general, se ve errores como que cuando se trata de añadir a una tabla intermedia si la fila se añade la restricción única duplicados-juntos por el FK. Supongo que en el ejemplo que nos ha facilitado "329051" es un identificador Post y "1827414" es un ID de etiqueta.

Normalmente en Django puede llamar al método add () varias veces para agregar la misma instancia y Django se encarga de todo para usted. Estoy asumiendo que el gerente modelo mantiene un estado para ayudar a determinar si cada add () representa una fila nueva o existente y si la fila parece ser nuevo se intenta una inserción.

Eso en sí mismo no explica por qué usted está recibiendo el error. Usted menciona "es responsable de bastante concurrencia en las operaciones de base de datos.". Sin saber lo que eso significa, supongo que se podría obtener una condición de carrera en la que múltiples hilos / procesos están tratando de añadir la misma nueva etiqueta alrededor del mismo tiempo y ambos están tratando insertos.

Otros consejos

creo que estoy viendo un problema similar en mi aplicación - Si envío dos solicitudes idénticas para añadir una relación M2M (por ejemplo, la etiqueta en mi caso también), me sale ese error porque la tabla M2M tiene una restricción única en (usuario, tag). Supongo que el servidor está procesando las funciones .Add al mismo tiempo .

if not already in database:
   # Both invocations reach here because the next line takes some time to process.
   create m2m row

No sé cómo se puede remediar.

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