2008-08-21 9 views
10

Ich schaue derzeit auf das Python-Framework Django für zukünftige db-basierte Web-Anwendungen sowie für einen Port von einigen Apps derzeit in PHP geschrieben. Eines der ärgerlichsten Probleme in meinen letzten Jahren bestand darin, Datenbankschemaänderungen zu verfolgen und diese Änderungen in Produktivsystemen zu implementieren. Ich habe nicht gewagt zu fragen, ob ich sie auch rückgängig machen könnte, aber zum Testen und Debuggen wäre das natürlich ein großartiges Feature. Von anderen Fragen hier (wie this one oder this one) kann ich sehen, dass ich nicht alleine bin und dass das kein triviales Problem ist. Ich fand auch viele Inspirationen in den Antworten dort.Version Track, automatisieren DB-Schema Änderungen mit Django

Jetzt, da Django sehr mächtig zu sein scheint, hat es irgendwelche Werkzeuge, um mit dem oben genannten zu helfen? Vielleicht ist es sogar in ihren Dokumenten und ich habe es verpasst?

Antwort

12

Es gibt mindestens zwei Dienstprogramme von Drittanbietern, die DB Schema-Migrationen verarbeiten können, South und Django Evolution. Ich habe es noch nie versucht, aber ich habe ein paar gute Dinge über den Süden gehört, obwohl die Evolution schon etwas länger dauert.

Siehe auch SchemaEvolution auf dem Django Wiki. Es ist nur eine Wiki-Seite über die Migration der db.

+0

South scheint das beste Date zu sein, nachdem ich mit Django Evolution herumgespielt habe, denke ich, dass Souths Datenmigration das Mörder-Feature ist. Ich glaube nicht, dass Django Evolution noch Datenmigration hat. nur Schema Evelution – Rasiel

2

ich das letzte Mal überprüft (Version 0.97), wird syncdb können Tabellen hinzufügen, um Ihre DB-Schema mit Ihrem models.py Datei zu synchronisieren, aber es kann nicht:

  • Umbenennen oder eine Spalte auf einem bevölkerten hinzufügen DB. Sie müssen das mit der Hand machen.
  • Refactorize dein Modell (wie teilen Sie eine Tabelle in zwei) und füllen Sie Ihre DB entsprechend neu.

Es könnte möglich sein, wenn ein Django-Skript zu schreiben, um die Migration zu machen, indem sie mit den zwei verschiedenen managers spielen, aber das könnte ewig dauern, wenn Ihre DB groß ist.

0

Und jetzt gibt es auch dmigrations. Von announcement:

django-evolution versucht, diesem Problem die clevere Art und Weise zu lösen, durch Änderungen an Modelle erfassen, die in dem Datenbankschema und herauszufinden, noch nicht reflektiert werden, was die beide wieder synchron zu bringen getan werden muss, . Demgegenüber nimmt dmigrations den dummen Ansatz: Es erfordert, dass Sie die Änderungen in einer Sequenz von Migrationen explizit angeben, die wiederum angewendet werden, um eine Datenbank in den letzten Zustand zu bringen, der die zugrunde liegenden Modelle widerspiegelt.

Dies bedeutet zusätzliche Arbeit für Entwickler, die Migrationen erstellen, aber es macht auch den gesamten Prozess völlig transparent - für unsere Projekte haben wir uns für das einfachste System entschieden, das möglicherweise funktionieren könnte.

(Meine fett)

0

Ich habe gehört, viel Gutes über Django Schema Evolution Branch und die waren opions der tatsächlichen Benutzer. Es funktioniert meist out of the box und tun, was es tun soll.

0

U sollte Dmigrations nachschlagen, es funktioniert ein bisschen anders als Django-eveolutions. Es zeigt Ihnen alles, was es tut und für komplizierte Dinge fragt es Sie nach Ihren Intervetnions. Es sollte großartig sein.

1

Es gab eine Panel-Sitzung zu DB-Schema-Änderungen auf der letzten DjangoCon; Es gibt eine (dank Google), die einige nützliche Informationen zu einer Reihe dieser Dienstprogramme bereitstellen sollte.

+0

Schöne Sitzung. Ich denke, ich habe mich entschlossen, an der Django-Evolution festzuhalten. – Farinha