2010-12-28 7 views
7

Ich habe eine Django-Bereitstellung in Produktion, die MySQL verwendet.Wie migrieren Django-Modelle von MySQL zu SQLite (oder zwischen zwei beliebigen Datenbanksystemen)?

Ich möchte mit SQLite weiter entwickeln, also möchte ich meine vorhandenen Daten in eine SQLite-Datenbank importieren. I

Es gibt ein Shell-Skript here, um einen allgemeinen MySQL-Dump in SQLite zu konvertieren, aber es funktionierte nicht für mich (anscheinend ist das allgemeine Problem nicht einfach).

Ich dachte, dies mit den Django-Modellen zu tun, muss viel einfacher sein. Wie würdest du das machen? Hat jemand irgendein Skript, um das zu tun?

Antwort

17

Verwendung

manage.py dumpdata > your_file.json 

Ihre Daten aus dem Produktionssystem zu exportieren (docs).

dann die Datei auf dem Entwicklungssystem bewegen und

manage.py loaddata your_file.json 

Sie können auch in your_app/Einrichtung Ordner mit dem Namen „initial_data.json“ und es wird automatisch geladen, wenn Sie laufen „verwalten legen Sie die Datei ausführen .py syncdb "(docs).

2

Haben Sie versucht, mit manage.py dumpdata > datadump und dann, wenn die neue Datenbank richtig eingerichtet ist, verwenden Sie Python manage.py loaddata datadump?

0

Vielleicht geben Süden einen Versuch:

http://south.aeracode.org/docs/index.html

+0

Süden für Schema am besten geeignet ist Migration, nicht für Import-/Exportdaten –

+0

@mosta: Die Schema-Migrationsfunktionen von Süden sind hervorragend, aber Süden hat auch gute Datenmigrationsfähigkeiten. – mkelley33

1

Wenn Sie Content in installierte App

INSTALLED_APPS = (
    'django.contrib.contenttypes', 
) 

Verwenden Skript wie das, was für neue Basis, die Sie Eintrag kopieren:

from django.contrib.contenttypes.models import ContentType 

    def run(): 

     def do(Table): 
      if Table is not None: 
       table_objects = Table.objects.all() 
       for i in table_objects: 
        i.save(using='slave') 

     ContentType.objects.using('slave').all().delete() 

     for i in ContentType.objects.all(): 
      do(i.model_class()) 

Komplette Handbuch here

+0

Ich glaube, du hast vergessen, etwas zu erwähnen. Hier sind die Dinge, die für mich gearbeitet haben 1) Stellen Sie die richtigen Einstellungen sicher (zB wenn keine Inhaltstypen hinzugefügt werden). dann 'python manage.py syncdb --database slave' oder' python manage.py migrieren --database slave'. 2) Schreibe die Funktion 'run()' etwas wo. 3) Rufen Sie es von 'python manage.py shell' auf oder erstellen Sie einen benutzerdefinierten django-Befehl (https://docs.djangoproject.com/en/1.9/howto/custom-management-commands/)[https://docs.djangoproject .com/de/1.9/howto/custom-management-commands /] und benutze es. –

+0

Ich glaube, das wird auch mit anderen dbs funktionieren. –

+0

Das ist ziemlich veraltete Antwort. Neueste Django haben eine bessere Version von 'dumpdata', so dass Sie keine benutzerdefinierte Lösung zum Wechseln zwischen DBs vornehmen müssen. – inoks

Verwandte Themen