Question

La base de données est MySQL.

J'utilise le django.contrib.auth.

Voici toutes les informations:

manage.py dumpdata auth> my_auth.json --natural --exclude contentTypes

Ensuite, j'ai supprimé la base de données entière (Drop Database My_Database) et créé une nouvelle base de données (Créer une base de données New_Database) (Utilisez ./manage.py Syncdb pour créer toutes les tableaux).

Alors

manage.py loaddata my_auth.json

J'ai une erreur:

IntegrityError: (1062, "Entrée en double '3-add_author' pour la clé 2")

Quel est le problème?

Toute aide est la bienvenue. Merci!

Était-ce utile?

La solution

(Actualisé)

Vous avez raison (vos commentaires ci-dessous). Le problème est en effet avec auth.permission.

Quand tu cours syncdb, auth.permission est rempli automatiquement avec des valeurs par défaut pour tous les modèles installés. Toutes les courses ultérieures de syncdb Ajoutera de nouvelles entrées pour tous les modèles récemment ajoutés.

Si à un stade ultérieur, vous réinitialisez la base de données et exécutez syncdb Encore une fois, les valeurs seront repeuplées et en fonction de l'ordre dans lequel les modèles installés sont inspectés, les autorisations associées peuvent être ajoutées dans un ordre différent, ce qui lui donne différents ID de votre base de données précédente (si des modèles ont été installés par étapes).

Pour éviter ce problème, vous pouvez soit partir auth.permission Out lors dumping votre auth les données (comme vous l'avez déjà souligné dans vos commentaires), ou réinitialiser le auth.permission Tableau avant de charger votre vidage de données.

De plus, il est important d'utiliser clés naturelles (--natural) Lors de la dérogation de vos données afin de ne pas référencer les données associées à l'aide de son ID entier (qui peut ne pas être la même lorsqu'elle est chargée dans une autre base de données). Cette fonctionnalité était introduit dans django 1.2.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top