2015-02-09 9 views
7

Ich persönlich mag Django für seine MVC-Ideale. Aber während ich Django-Migrationen in Version 1.7 ausführe, werden alle Migrationen, die ich dort mache, im Migrationsverzeichnis gespeichert. Wenn ich diese Datei lösche, wird bei der Migration ein Fehler ausgegeben.Kann ich die Django-Migrationsdateien innerhalb des Migrationsverzeichnisses löschen

Ich testete so. Ich habe ein neues Django-Projekt erstellt und ein Git Repo initiiert. Ich habe 3-4 Migrationen in Django durchgeführt, was dazu geführt hat, dass die Migrationsdateien im Migrationsverzeichnis 3-4 waren. Ich versuchte, die sehr ältere Migrationsdateien d.h (1. und 2. Migration-Dateien) zu löschen und versucht

python manage.py makemigrations 

zu laufen, die einige Fehler verursacht, wie „Migrationsdateien nicht gefunden“. Später habe ich einen Git-Stash gemacht, der die gelöschten Dateien wiederherstellte. Jetzt habe ich versucht, den gleichen Befehl erneut auszuführen, und es funktionierte gut.

Was meine Frage ist, wenn eine Person während der Entwicklung etwa 50 Änderungen in db ausführt, werden alle Migrationsdateien im Migrationsverzeichnis gespeichert. Ist es möglich, diese Dateien zu löschen und Änderungen an db wieder ohne Unterbrechung vorzunehmen?

+0

Sie gegen eine bestehende DB zu entwickeln sind, dass die Migrationen Ihre Gedanken über angewendet hat? Wenn dies der Fall ist, möchten Sie diese Mogrationen nicht löschen. Wenn Sie eine neue Datenbank von Grund auf mit syncdb starten, benötigen Sie keine Ihrer alten Migrationen. Also denke ich, die Antwort ist "hängt von Ihrem DB-Setup ab" –

+0

Wenn ich meinen vorherigen Kommentar auf eine andere Art und Weise schreibe, wäre der einfachste Weg, Ihre 50 Migrationen zu verwerfen, die db (und 50 Migrationen) wegzublasen und von vorne zu beginnen Modelle. Ist das eine Option für dich? –

+1

Ich verwende vorhandene db. also, wenn ich meine db löschen, dann kann ich die Migrationsdateien löschen, ist es richtig? –

Antwort

7

Die Antwort ist "es kommt darauf an".

Wenn Sie gegen eine Produktions-DB oder eine Datenbank arbeiten, die aus irgendeinem Grund nicht regelmäßig entfernt werden kann, sollten Sie unbedingt die Migrationsdateien beibehalten, die Sie auf Ihre Datenbank angewendet haben. Sie sollten mit dem Rest Ihres Codes in die Quellcodeverwaltung eingecheckt werden.

Jetzt, für eine Situation wie Ihre, die einfachste Möglichkeit, Ihre 50 Migrationen zu verwerfen wäre, nur die db wegzublasen (und es ist 50 Migrationen) und von vorne beginnen bei Ihren aktuellen Modellen. Es ist oft eine gute Idee, dies regelmäßig zu tun, während Sie Ihre Modelle während der Entwicklung weiterentwickeln.

Es ist in Ordnung, Ihre Modelle wegzublasen, wenn Sie Ihre DB wegblasen, weil Syncdb eine leere DB mit Ihren aktuellen Modellen erstellen wird. Es füllt dann optional die db mit irgendwelchen anfänglichen Fixtures. Vom Konzept her gibt es nichts mehr, von dem Sie an einem solchen Punkt migriert haben, so dass Sie Ihre alten Migrationen für Ihre alte db nicht beibehalten müssen. Sie sind nicht mehr relevant.

Es ist in der Regel nicht gut, Migrationsdateien zu löschen, die auf Ihre Datenbank angewendet wurden, es sei denn, Sie 1) blasen die Datenbank vollständig weg oder 2) setzen die Migrationen zuerst zurück.

Sie können auch wissen, dass wenn Sie Migrationen auf eine Datenbank anwenden, diese Migrationen auch in einer speziellen Tabelle in der Datenbank selbst aufgezeichnet werden. Deshalb gehen die Dinge verrückt, wenn Sie nur die Migrationsdateien löschen. Sie haben synchron mit dem Migrationstabelle bleiben

0

Wenn Sie Ihre DB behalten mögen, aber die Anzahl der Migrationsdateien zu verringern, ist eine Option, die Migrationen in eine Quetschung (oder nur wenige, wenn komplexe Abhängigkeiten) Migration.

Von der offiziellen Dokumentation:

Sie werden ermutigt, Migrationen frei und sich keine Sorgen darüber, wie viele Sie haben zu machen; Der Migrationscode ist so optimiert, dass Hunderte ohne große Verzögerung bewältigt werden können. Aber schließlich werden Sie von mehreren hundert Migrationen auf einige wenige zurückwechseln wollen, und hier kommt das Squashing ins Spiel.

Vor Quetschen, sollten Sie sich bewusst sein, dass „Modell Interdependenzen in Django können sehr komplex, und Quetschungen in Migrationen führen können, die nicht laufen“ benötigt werden und daher Handarbeit kann.

Ausführliche Informationen darüber, wie die Quetschung zu machen, auf die Dokumentation verweisen: https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations

Verwandte Themen