Django South - ein nützliches Tool für Django Entwickler

0 | 5801 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Django South - ein nützliches Tool für Django Entwickler" mit Ihrem Wissen!

Anzeige Hier werben

Die Geschichte

South wurde ursprünglich 2008 von Torchbox entwickelt, da keine vorhandene Lösung den Workflow und benötigten Features bereitstellen konnte. Kurz darauf wurde es open-source und fand viel Unterstützung nach der Schema Evolution auf der DjangoCon 2008. Im Jahr 2009 wurde es zum beliebtesten aller Migrationsalternativen und ist bis heute unumstritten standhaft. Obwohl es viele Stimmen gab, die die Integration von South in Django forderten, wurde dies aufgrund der relativen Unreife bezüglich Datenbankmigrationslösungen bis jetzt noch nicht verwirklicht.

Die Haupteigenschaften

  • Automatische Migrationserstellung: South erkennt, was sich in der Datei models.py geändert hat, und schreibt automatisch Migrationen, die die Veränderungen beinhalten.
  • Datenbankunabhängigkeit: So weit wie möglich nimmt South keine Datenbanken wahr, unterstützt aber fünf verschiedene Datenbank-Backends
  • App-Intelligenz: South kennt und arbeitet mit dem Konzept der Django Apps, was es erlaubt, Migrationen für einige Apps zu benutzen, den Rest mit syncdb weiter zu betreiben
  • VCS-sicher: South erkennt, wenn jemand anderer Migrationen für dieselbe App benutzt und es einen Konflikt gibt.

Was sind Migrationen?

Migrationen (auch „Schemaevolutionen“ oder „Mutationen“ genannt) ist der Vorgang der Änderung des Datenbankschemas von einer Version zu einer weitern. Django für sich kann dies nur beim Hinzufügen neuer models bewerkstelligen. Allerdings gibt es bei fast allen Projekten Änderungen die die Models betreffen, sei es das Hinzufügen eines neuen Felds oder das Umstellen einer Datenbankspalte auf null=True.

South, und andere Lösungen, stellen einen Weg bereit, das Datenbankschema mithilfe von Werkzeugen einfach und vorhersehbar zu verändern. Die geschriebenen Migrationen sagen South, wie sich die Veränderungen von einer Version zur nächsten verhalten, was auch die Möglichkeit bietet, durch die History des Datenbankschemas vor und zurück zu gehen um evtl. Änderungen rückgängig zu machen.

Mit South geben die Migrationen auch die Erstellung der anfänglichen Datenbank vor, denn die erste Migration migriert von einem leeren Schema zur ersten Tabelle der Datenbank. Von dem ersten Stand aus durch alle Migrationen wird die Datenbank auf den aktuellsten Stand der App gebracht.

Installation von Django South

Die aktuelle Version von South ist 0.7.6.

Installation mithilfe von easy_install:

easy_install South

bei schon vorhandener alten Version von South

easy_install -U South

Installation mithilfe von Mercurial:
Wechseln in das gewünschte Installationsverzeichnis

hg clone http://bitbucket.org/andrewgodwin/south/

bei schon vorhandener alten Version

hg pull hg up -C tip

Installation mithilfe von herunterladbarem Archiv
unter http://www.aeracode.org/releases/south/ das gewünschte Archiv herunterladen und in einem 'south'-Ordner extrahieren

Installation von einem Verzeichnis aus (bezogen auf Mercurial und heruntergeladenem Archiv)

python setup.py develop python setup.py install

Konfiguration von Django

  • In der settings.py muss unter INSTALLED_APPS 'south' hinzugefügt werden.
  • Nun sollte 'import south' innerhalb der Python-Shell ohne Fehler funktionieren.
  • Zum Abschluss muss die Datenbank mit dem Befehl python manage.py syncdb aktualisiert werden.
  • Nun ist South in das Projekt geladen und bereit für die erste Migration.

Erstes Basisbeispielprojekt

Anlegen eines neuen Projekts namens 'southtut'

python manage.py startapp southtut

Nun muss die neue App in der settings.py unter INSTALLED_APPS hinzugefügt werden.
In der neu erstellten southtut/models.py Datei kann folgender Code eingefügt werden.

 
Python
1
2
3
4
5
PythonPythonfrom django.db import models

class Knight(models.Model):
    name = models.CharField(max_length=100)
    of_the_round_table = models.BooleanField()

Anstatt von einem syncdb wird jetzt eine Migration erstellt.

Die erste Migration

Um die erste Migration zu erstellen muss folgender Code ausgeführt werden:

python manage.py schemamigration southtut --initial

Ein ähnlicher Text sollte danach ausgegeben werden:

Creating migrations directory at '/home/andrew/Programs/litret/southtut/migrations'... Creating __init__.py in '/home/andrew/Programs/litret/southtut/migrations'... + Added model southtut.Knight Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate southtut

Es wurde nun ein Migrationsverzeichnis erstellt und eine neue Migration hinein gespeichert. Nun muss nur noch diese Migration durchgeführt werden.

python manage.py migrate southtut Running migrations for southtut: - Migrating forwards to 0001_initial. > southtut:0001_initial - Loading initial data for southtut.

Ändern des Models

Nun wird eine Änderung in dem Model Knight durchgeführt indem ein neues Feld hinzugefügt wird.

 
Python
1
2
3
4
5
6
PythonPythonfrom django.db import models

class Knight(models.Model):
    name = models.CharField(max_length=100)
    of_the_round_table = models.BooleanField()
    dances_whenever_able = models.BooleanField()

Um diese Änderung in unsere Datenbank einzupflegen muss folgender Befehl ausgeführt werden.

Python manage.py schemamigration southtut --auto

Die weitere Textausgabe sollte wie folgt sein:

+ Added field dances_whenever_able on southtut.Knight Created 0002_auto__add_field_knight_dances_whenever_able.py. You can now apply this migration with: ./manage.py migrate southtut

Und nun muss erneut die Migration durchgeführt werden.

python manage.py migrate southtut Running migrations for southtut: - Migrating forwards to 0002_auto__add_field_knight_dances_whenever_able. > southtut:0002_auto__add_field_knight_dances_whenever_able - Loading initial data for southtut.

Die neu hinzugefügte Spalte für das Model wurde somit in die Datenbank eingepflegt und kann nun gefüllt werden.

Zusätzliche Funktionen:

Konvertierung einer App
Die Konvertierung einer App für die Benutzung von South ist einfach.

  • In die settings.py unter INSTALLED_APPS 'south' hinzufügen
  • Den Befehl python manage.py syncdb ausführen um South in die Datenbank zu laden.
  • Den Befehl python manage.py convert_to_south myapp durchführen wobei 'myapp' den namen der App darstellt

Standardwerte
Nach dem Hinzufügen z.B. eines Integer-Felds, welches nullable ist, wird bei der Migration nachgefragt ob South die Migration abbrechen und alles unverändert lassen soll bis ein Standardwert in der models.py eingetragen wird, oder ob man direkt einen Standardwert eingeben möchte.

Unique-Werte
South erkennt auch Änderungen bezüglich der unique-Attribute. Diese werden in der Migration angewendet. Zusätzlich werden auch Änderungen in der Meta der models.py betreffend unique_together erkannt.

ManyToMany-Felder
Bei der Migration von ManyToMany-Feldern erstellt South die Tabelle, die ManyToMany representiert. Diese Tabelle wird beim Löschen des Felds bei der Migration wieder entfernt.

Costum-Felder
Mithilfe des model introspector hat South die Möglichkeit mit Costom-Feldern zu arbeiten. Weitere Informationen sind hier genauer beschrieben: Custom Fields.

Iteratives Arbeiten an einer Migration
Sollten nach einer vollständigen Migration einer Änderung an der models.py Schreibfehler oder ähnliches ausgebessert werden, springt South automatisch eine Migration zurück und wendet die ausgebesserte Version als Migration an.

Auflistung aktueller Migrationen
Mit dem Befehl

python manage.py migrate --list

lassen sich alle Migrationen darstellen.

Datenmigration
Datenmigrationen werden benutzt, um die gespeicherten Daten der Datenbank an ein neues Schema oder Feature anzupassen. Eine genaueres Beispiel hierzu kann hier eingesehen werden: Data migration

Die komplette englische Dokumentation befindet sich auf folgender Seite: http://south.readthedocs.org/en/latest/index.html


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher hat 1 Person an der Seite "Django South - ein nützliches Tool für Django Entwickler" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Django South - ein nützliches Tool für Django Entwickler" hier bearbeiten.

Mitarbeiter
  • hat keine Beschreibung angegeben. Eine Beschreibung kann man unter dem Punkt "Profil bearbeiten" im Kontrollzentrum eintragen.