Quelle est la meilleure façon de migrer des données dans django

Après avoir fait quelques changements dans mes modèles (par exemple. nouveau champ dans un modèle et nouveau modèle) Quelle est la meilleure façon de refléter ces changements dans ma base de données?


PS: je voulais voir de nombreuses solutions en un seul endroit coté. Apparemment, d'autres solutions sont déjà énumérées ici .

27
demandé sur Community 2008-10-07 00:14:09

6 réponses

j'ai posé une question similaire ici et j'ai eu pas mal de réponses.

il y a beaucoup de façons de le faire, comme faire manuellement le dumping et le rechargement avec SQL, en utilisant des fixtures ou en utilisant l'un des paquets "emerging" schema-evolution pour Django:

16
répondu Farinha 2017-05-23 12:09:53

une autre technique consiste à utiliser les arguments dumpdata et loaddata pour manage.py, killing your database in-between:

  1. python manage.py dumpdata > dump.json
  2. avec un outil externe, laisser tomber toutes les tables affectées, ou tuer le db entier
  3. python manage.py loaddata dump.json

Voir manage.py docs pour plus d'.

23
répondu shacker 2008-10-18 00:28:14

dépend de la portée des modifications. Si c'est au-delà d'un ALTER, tu fais une opération majeure. Faites des sauvegardes du modèle ainsi que la base de données de sorte que vous pouvez revenir en arrière.

Ma préférence est de présenter votre nouveau modèle (révisé, corrigé, élargi) comme une nouvelle application. Il n'y aura pas D'URL, juste un modèle.

  1. créer le nouveau modèle comme une nouvelle application. Créer des tests, juste pour être sûr que ça marche.
  2. syncdb pour construire cette mise en œuvre provisoire du nouveau modèle.
  3. écrivez un petit utilitaire unique pour interroger votre ancien modèle, et chargez votre nouveau modèle. Vous pourriez vouloir essayer ceci en SQL pur. Je préfère écrire une simple requête, construire et sauver boucle.
  4. une fois le nouveau modèle chargé, vous pouvez le transférer dans un fichier JSON.

une fois que vous avez retiré les données de votre ancien modèle, vous pouvez reconstruire votre base de données dans le nouveau format préféré.

  1. déplacez le nouveau modèle dans votre application existante.
  2. supprimer les anciennes versions des tables de l'application.
  3. syncdb pour construire les nouvelles tables.
  4. chargez le fichier JSON avec les données.
3
répondu S.Lott 2008-10-06 20:37:24

Django a maintenant ses propres migrations intégrées, documentées à:

https://docs.djangoproject.com/en/dev/topics/migrations /

3
répondu Stian Jensen 2014-09-11 22:07:18

Look with manage.py sqlall quels sont les paramètres pour les nouvelles colonnes et les ajouter manuellement dans votre base de données avec des instructions Alter table. De cette façon, vous n'avez pas à refaire votre base de données; cela nécessite des connaissances SQL...

regardez ici (Faites défiler vers le bas jusqu'à" apporter des changements à un schéma de base de données")

2
répondu fijter 2008-10-06 20:34:43

Perform these steps in order may help you :

For more details,

clickhere: http://south.readthedocs.org/en/latest /

1) python manage.py schemamigration apps.appname --initial

crée le dossier de migration par défaut.

2) python manage.py migrate apps.appname --fake

génère une fausse migration.

3) python manage.py schemamigration apps.appname --auto

alors vous pouvez ajouter des champs comme vous souhaitez et exécuter la commande ci-dessus.

4) python manage.py migrate apps.appname

puis migrer les fichiers vers la base de données.

0
répondu Vijesh Venugopal 2014-03-17 09:46:40