2016-04-09 5 views
6

Migrationen ermöglichen die Umwandlung von einem Datenbankschema in ein anderes, während die aktuellen Daten in der Datenbank beibehalten werden. Django ermöglicht in dem models.py Datei-Migrationen mit dem Befehl python manage.py makemigrationsWie können Sie aufeinander folgende Datenbankmigrationen in django 1.9+ zusammenführen?

Jedes Mal makemigrations ausgeführt wird eine neue Migrationsdatei 000n.. hinzugefügt wird, basierend auf den Änderungen erkannt zu schaffen.

Manchmal, nachdem ich kleine Änderungen an models.py vorgenommen habe, möchte ich Makemigrationen ausführen, möchte aber keine neue Migration erstellen, da die vorherigen Migrationen noch nicht verwendet wurden, sodass sie zusammengeführt werden können, hauptsächlich weil sie ausgeführt werden Jede Migration in der Produktion kann viel Zeit in Anspruch nehmen, wenn viele Daten in der Datenbank vorhanden sind. Daher ist eine vorherige Zusammenführung von Migrationen möglicherweise vorzuziehen.

Gibt es eine Möglichkeit eine neue Migration 000n .. zu ermöglichen mit einer bestehenden Migration verschmolzen werden 000 (n-1) ..?

Antwort

8

Der Befehl, nach dem Sie suchen, lautet squashmigrations. Es führt alle nicht angewendeten Migrationen einer bestimmten Anwendung in einer einzigen Datei zusammen.

1

Ich möchte makemigrations laufen, wollen aber nicht eine neue Migration erstellt werden, weil die bisherigen Migrationen noch nicht verwendet worden

Dies ist kein Problem, läuft Django Migrationen von oben nach unten, was bedeutet: Ihre letzte Migrationsdatei wartet, bis andere vorherige Migrationsdateien ausgeführt werden.

da läuft jeder Migration in der Produktion viel Zeit in Anspruch nehmen kann, wenn es eine Menge von Daten in der Datenbank

Wie viele Daten sehen Sie in der Datenbank haben? Wenn wirklich viel, dann müssen Sie bereits Replikationen und redundante Db-Server haben. In diesem Fall schalten Sie die Lese- und Schreibvorgänge auf einen, sagen wir Slave-Server, um die Migrationen im Master auszuführen. und dann den Verkehr zurück zum Master schalten, und vorher sicherstellen, dass der Abstand zwischen ihnen 0 ist und das neue Schema korrekt zwischen ihnen repliziert wird

+1

Ich habe die Frage nicht so gut eingeordnet (umformulierte es jetzt). Ich weiß, dass Migrationen nacheinander angewendet werden. Was ich zu sagen versuchte, war, dass, wenn 2 Migrationen noch nicht angewendet wurden, es einen Vorteil haben könnte, sie vorher zusammenzufügen und dann anzuwenden, anstatt sie nacheinander auszuführen. Der zweite Teil dieser Antwort ist interessant! –