it-swarm.com.de

Was ist der beste Weg, um eine Django-DB von SQLite nach MySQL zu migrieren?

Ich muss meine Datenbank von SQLite auf MySQL migrieren, und die verschiedenen Tools/Skripte dort sind zu zahlreich, um die sicherste und eleganteste Lösung zu finden.

Dies schien mir nett http://djangosnippets.org/snippets/14/ zu sein, aber es scheint 3 Jahre her zu sein, seit ich ein Update bekommen habe, das besorgniserregend ist.

Können Sie eine Lösung empfehlen, die für Django 1.1.1 als zuverlässig bekannt ist?

38
GJ.

Ausführen:

python manage.py dumpdata > datadump.json

Ändern Sie als Nächstes Ihre Einstellungen in die MySQL-Datenbank.

Endlich:

python manage.py loaddata datadump.json
71
Martin Eve

Nach langem Suchen bekam ich einige Probleme, von denen ich hoffe, dass zukünftige Antworten hilfreich sein werden.

meine Formel ist

  1. python manage.py dumpdata > datadump.json
  2. Ändern Sie die Datei settings.py in Ihre Mysql
  3. Stellen Sie sicher, dass Sie eine Verbindung mit Ihrem mysql herstellen können (Berechtigungen usw.).
  4. python manage.py migrate --run-syncdb
  5. Schließen Sie Contentype-Daten mit diesem Snippet aus

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

  6. python manage.py loaddata datadump.json

Hoffe das wird dir helfen!

33

Dies ist eine bessere Methode, um die an anderer Stelle beschriebenen ContentType Probleme zu vermeiden:

./manage.py dumpdata --exclude contenttypes --exclude auth.permission --exclude sessions --indent 2 > dump.json

Dann:

./manage.py loaddata dump.json
1

Eine (umfassendere) Liste der Schritte, die ich für den Wechsel von SQLite zu MySQL, YMMV, benötigt habe:

  1. python manage.py dumpdata> datadump.json
  2. Stellen Sie sicher, dass Sie eine Verbindung mit Ihrem mysql herstellen können (Berechtigungen usw.).
  3. Stellen Sie sicher, dass Sie PRIVILEGES HABEN, um FOREIGN_KEY_CHECKS zu ändern (ich musste meine eigene private Instanz von mysql installieren und ausführen).
  4. Stellen Sie sicher, dass die InnoDB-Engine NICHT verwendet wird (verwenden Sie MyISAM in every table), oder der nächste Schritt funktioniert nicht (wird nicht automatisch ausgeführt)!
  5. Entspannen Sie die Validierung durch diesen Befehl (dies wird in InnoDB nicht wirksam): SET GLOBAL FOREIGN_KEY_CHECKS = 0;
  6. Laden Sie die Django_site.sql-Tabelle separat (bei Verwendung von contrib.sites).
  7. Ändern Sie die Datei settings.py in Ihr neues mysql
  8. python manage.py migriert --run-syncdb
  9. Beheben Sie syncdb-Fehler, indem Sie bei Bedarf mit dem Code in/migrations-Verzeichnissen Ihrer Django-Apps und den DB-Tabellen basteln
  10. Contentype-Daten mit diesem Snippet ausschließen (kann in das Hauptmodul urls.py eingefügt werden): from Django.contrib.contenttypes.models import ContentTypeContentType.objects.all().delete()quit()
  11. Wenn Sie json-Daten bearbeiten müssen, müssen Sie diese zunächst überprüfen: cat datadump.json | python -m json.tool > datadump_pretty.json
  12. python manage.py loaddata datadump.json
  13. Beheben Sie alle Datenkürzungsprobleme
  14. Fügen Sie der Datenbank Zeitzone-Daten hinzu: 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. Testen Sie, ob die Site funktioniert, ohne Daten zu übermitteln
  16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
  17. Testen Sie den Rest
0
Alexei Yur