Pregunta

La base de datos es MySQL.

Yo uso el de django.contrib.auth.

Aquí está toda la info:

manage.py dumpdata auth > my_auth.json naturales --exclude contenttypes

Luego he eliminado toda la base de datos (caída de la base de datos mi_base_datos), y crea una nueva base de datos (crear base de datos new_database)(use ./manage.py syncdb para crear todas las tablas).

Entonces

manage.py loaddata my_auth.json

Tengo un error:

IntegrityError:(1062, "Duplicate entry '3-add_author' de la llave 2")

¿Cuál es el problema?

Cualquier ayuda será muy apreciada.Gracias!

¿Fue útil?

Solución

(Actualizado)

Tienes razón (re tus comentarios a continuación).El problema es, de hecho, con auth.permission.

Cuando se ejecuta syncdb, auth.permission es rellena automáticamente con los valores por defecto para todos los modelos instalado.Cualquiera de las siguientes ejecuciones de syncdb se añaden nuevas entradas para cualquiera de los modelos que se han añadido recientemente.

Si en una etapa posterior de restablecer la base de datos y ejecutar syncdb de nuevo, los valores serán repoblados y según el orden en el cual se instaló modelos son inspeccionados, los permisos asociados pueden ser agregados en un orden diferente, dándole diferentes identificadores de la anterior base de datos (si los modelos se han instalado en las etapas).

Para evitar este problema, puede dejar auth.permission cuando el dumping su auth de datos (como ya has señalado en sus comentarios), o el restablecimiento de la auth.permission tabla antes de cargar el volcado de datos.

También, es importante el uso de claves naturales (--natural) cuando el dumping de los datos, de modo que no hace referencia a los datos relacionados con el uso de su id entero (que puede no ser la misma cuando se carga en otro db).Esta característica se introducido en Django 1.2.

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