Mit Django Datenbank Tabellen ändern


Coding , ,


…geht leider nicht. Ist ein Datenbank Model einmal definiert, lässt es sich nicht ohne Umwege erweitern. Ruby on Rails ist da schon ein Stück weiter.


Das Problem lässt sich aber mit einem kleinen Trick lösen. Mit Django hat man die Möglichkeit die komplette Datenbank serialisiert zu dumpen und anschliesend wieder zu laden. Die Vorgehensweise ist einfach, einen Dump vom Model bzw. der ganzen Datenbank machen, Model um die gewünschten Felder erweitern, DB Tabellen löschen, Tabellen mit syncdb neu anlegen und den Dump wieder einspielen.

Die komplette Datenbank kann mit

python manage.py dumpdata > mydump.json

gedumpt werden. Einzelne Models mit

python manage.py dumpdata MyModel > mydump.json

Das importieren des Dumps geht wie folgt:

python manage.py loaddata mydump.json

Will man aber z.B. eine Anwendung mit initialen Daten versorgen, dann kann das mit Fixtures gemacht werden. Hierfür ist ein Eintrag in der Settings Datei notwendig.

FIXTURE_DIRS = (
        '/absoluter/pfad/zum/fixtures/verzeichnis',
)

Liegt nun in diesem Verzeichnis eine Datei mit der Endung json, dann wird diese automatisch beim syncdb geladen und importiert.


2 Kommentare zu “Mit Django Datenbank Tabellen ändern”

  1. Yanick Dickbauer Sagt:

    Danke wusste ich noch nicht. Mir ist es aber trotzdem lieber die entsprechenden Tabellen durch ein nachträgliches manuelles >>alter table add column … << zu ändern.

  2. ash Sagt:

    Es gibt auch bessere alternativen:
    django evolution http://code.google.com/p/django-evolution/
    dmigrations http://code.google.com/p/dmigrations/
    und django south http://south.aeracode.org/


Kommentar hinzufügen