web-dev-qa-db-fra.com

Quel est le meilleur moyen de migrer une base de données Django de SQLite vers MySQL?

Je dois migrer ma base de données de sqlite vers mysql, et les divers outils/scripts disponibles sont trop nombreux pour que je puisse facilement identifier la solution la plus sûre et la plus élégante.

Cela me semblait gentil http://djangosnippets.org/snippets/14/ mais cela fait 3 ans que je reçois une mise à jour, ce qui est inquiétant.

Pouvez-vous recommander une solution réputée fiable avec Django 1.1.1? 

38
GJ.

Exécuter:

python manage.py dumpdata > datadump.json

Ensuite, changez votre fichier settings.py dans la base de données mysql.

Finalement:

python manage.py loaddata datadump.json
71
Martin Eve

Après des recherches approfondies, j'ai eu plusieurs problèmes qui, je l'espère, seront utiles à l'avenir.

ma formule est

  1. python manage.py dumpdata > datadump.json
  2. Changez settings.py en votre mysql
  3. Assurez-vous que vous pouvez vous connecter sur votre mysql (permissions, etc.)
  4. python manage.py migrate --run-syncdb
  5. Exclure les données contentype avec cet extrait

    from Django.contrib.contenttypes.models import ContentType ContentType.objects.all().delete() quit()

  6. python manage.py loaddata datadump.json

J'espère que cela vous aidera!

33

Une liste (plus complète) des étapes nécessaires pour passer de SQLite à MySQL, YMMV:

  1. python manage.py dumpdata> datadump.json
  2. Assurez-vous que vous pouvez vous connecter sur votre mysql (permissions, etc.)
  3. Assurez-vous que vous disposez des privilèges nécessaires pour modifier FOREIGN_KEY_CHECKS (je devais installer et exécuter ma propre instance privée de mysql pour cela).
  4. Assurez-vous que le moteur InnoDB n'est PAS utilisé (utilisez MyISAM dans every table) ou la prochaine étape ne fonctionnera pas (échec en mode silencieux)!
  5. Relaxez la validation avec cette commande (cela ne prendra pas effet dans InnoDB): SET GLOBAL FOREIGN_KEY_CHECKS = 0;
  6. Charge la table Django_site.sql séparément (si vous utilisez contrib.sites)
  7. Changez settings.py en votre nouveau mysql
  8. python manage.py migrer --run-syncdb
  9. Corrigez les erreurs d'erreurs syncdb en modifiant le code dans les répertoires/migrations de vos applications Django et les tables de base de données, le cas échéant.
  10. Exclure les données de type de contenu avec cet extrait (vous pouvez le placer dans le module principal urls.py): from Django.contrib.contenttypes.models import ContentTypeContentType.objects.all().delete()quit()
  11. Si besoin éditer des données json doivent le prettifier en premier: cat datadump.json | python -m json.tool > datadump_pretty.json
  12. python manage.py loaddata datadump.json
  13. Résoudre les problèmes de troncature des données
  14. Ajouter des données de fuseau horaire à la base de données: mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -P 1234 -u root -p --protocol=tcpmysql -P 1234 -u root -p -e "flush tables" --protocol=tcp
  15. Tester le site fonctionne sans soumettre aucune donnée
  16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
  17. Testez le reste
0
Alexei Yur