In Fortsetzung von Letztes Mal möchte ich die Migrationsfunktion des Django-Frameworks untersuchen.
Entwicklungsumgebung |
---|
Mac OS:Sierra |
python2.7.10 |
django1.11.2 |
mysql5.7.18 |
Beim letzten Mal habe ich den grundlegenden Workflow für Migrationen vorgestellt. Dieses Mal werde ich jedoch grundlegende Befehle im Zusammenhang mit Migrationen und die Lösung von Problemen untersuchen, auf die Sie während der tatsächlichen Verwendung häufig stoßen.
In den offiziellen Dokumenten werden vier Befehle für Migrationen vorgestellt. Verwenden wir die Demo-App und die Befehle.
showmigrations Geben Sie den folgenden Befehl in die Befehlszeile ein:
python manage.py showmigrations
In der Ausgabe:
admin
[X] 0001_initial
[X] 0002_logentry_remove_auto_add
auth
[X] 0001_initial
[X] 0002_alter_permission_name_max_length
[X] 0003_alter_user_email_max_length
[X] 0004_alter_user_username_opts
[X] 0005_alter_user_last_login_null
[X] 0006_require_contenttypes_0002
[X] 0007_alter_validators_add_error_messages
[X] 0008_alter_user_username_max_length
contenttypes
[X] 0001_initial
[X] 0002_remove_content_type_name
polls
[X] 0001_initial
[ ] 0002_article_image_url
sessions
[X] 0001_initial
Der aktuelle Status der Migrationen für jede App im Projekt wird in einer Checkliste angezeigt. Alle Standard-App-Migrationen wie Admin, Auth, Inhaltstypen und Sitzungen wurden berücksichtigt. In Umfragen, bei denen es sich um eine Demo-App handelt, wird die in der Initialisierung angegebene Migrationsdatei 0001_initial.py überprüft. Die Migrationsdatei 0002_article_image_url.py, die durch Wiederherstellung abgebrochen wurde, wurde deaktiviert. Sie können die App auch mit Optionen im Befehl angeben.
python manage.py showmigrations polls
Dadurch wird die Ausgabe auf eine bestimmte App beschränkt.
polls
[X] 0001_initial
[ ] 0002_article_image_url
makemigrations Erstellen Sie eine Migrationsdatei gemäß den Modelländerungen. Ein konkretes Beispiel finden Sie unter Letztes Mal.
migrate Verwenden Sie die erstellte Migrationsdatei, um das Modell in der Datenbank wiederzugeben. Fügen wir die abgebrochenen Änderungen erneut hinzu.
python manage.py migrate polls
Ausgabe
Operations to perform:
Apply all migrations: polls
Running migrations:
Applying polls.0002_article_image_url... OK
Überprüfen Sie den Status von Migrationen in der Demo-App:
python manage.py showmigrations polls
Ausgabe:
polls
[X] 0001_initial
[X] 0002_article_image_url
Sie können sehen, dass die Migrationsdatei 0002_article_image_url.py wiedergegeben wurde.
sqlmigrate
Zeigt die SQL-Anweisung an, die den Inhalt der Migrationsdatei tatsächlich ausführt. Wenn Sie es verwenden möchten, müssen Sie den Namen der Zielanwendung und den Namen der Migrationsdatei in die Optionen eingeben. Geben Sie die Migrationsdatei 0002_article_image_url an und führen Sie sie aus.
python manage.py sqlmigrate polls 0002_article_image_url
Ausgabe
BEGIN;
--
-- Add field image_url to article
--
ALTER TABLE `polls_article` ADD COLUMN `image_url` varchar(200) DEFAULT toBeImplement NOT NULL;
ALTER TABLE `polls_article` ALTER COLUMN `image_url` DROP DEFAULT;
COMMIT;
Das Verhalten verdächtiger Migrationen wurde sofort gelöscht. Darüber hinaus können Sie mit der Option --backwards auch die SQL-Anweisung zum Abbrechen von Migrationen anzeigen.
python manage.py sqlmigrate --backwards polls 0002_article_image_url
Ausgabe
BEGIN;
--
-- Add field image_url to article
--
ALTER TABLE `polls_article` DROP COLUMN `image_url`;
COMMIT;
Der Kommentar beschreibt die Migrationsdatei, aber die SQL-Anweisung macht die Änderungen ordnungsgemäß rückgängig (entfernt die Spalte image_url).
Recommended Posts