Ich möchte eine Migration für eine Flaschen-App durchführen. Ich benutze Alembic.
Ich erhalte jedoch die folgende Fehlermeldung.
Target database is not up to date.
Online habe ich gelesen, dass es etwas damit zu tun hat. http://alembic.zzzcomputing.com/de/latest/cookbook.html#building-an-up-to-date-database-from-scratch
Leider verstehe ich nicht ganz, wie ich die Datenbank auf den neuesten Stand bringen kann und wo/wie ich den im Link angegebenen Code schreiben soll. Wenn Sie Erfahrung mit Migrationen haben, können Sie mir das bitte erklären
Vielen Dank
Nachdem Sie eine Migration erstellt haben, entweder manuell oder als --autogenerate
, müssen Sie sie mit alembic upgrade head
anwenden. Wenn Sie db.create_all()
von einer Shell aus verwendet haben, können Sie mit alembic stamp head
angeben, dass der aktuelle Status der Datenbank die Anwendung aller Migrationen darstellt.
Ich musste aus irgendeinem Grund einige meiner Migrationsdateien löschen. Nicht sicher warum. Aber das hat das Problem behoben.
Ein Problem ist, dass die Datenbank mit allen neuen Tabellen usw. ordnungsgemäß aktualisiert wird. Die Migrationsdateien selbst zeigen jedoch keine Änderungen an, wenn ich automigrate verwende.
Wenn jemand eine bessere Lösung hat, lass es mich wissen, denn im Moment ist meine Lösung irgendwie hackig.
Meine Einschätzung ist wie diese Frage: Wenn ich "./manage.py db migrate -m 'füge Beziehung'" ausführen, trat der Fehler wie folgt auf: " Alembic.util.exc.CommandError: Die Zieldatenbank ist nicht auf dem neuesten Stand." . "
Also habe ich den Status meiner Migration überprüft:
(venv) ]#./manage.py db heads
d996b44eca57 (head)
(venv) ]#./manage.py db current
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
715f79abbd75
und festgestellt, dass die Köpfe und der Strom unterschiedlich sind!
Ich habe es mit diesen Schritten behoben:
(venv)]#./manage.py db stamp heads
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running stamp_revision 715f79abbd75 -> d996b44eca57
Und jetzt ist der Strom dem Kopf gleich
(venv) ]#./manage.py db current
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
d996b44eca57 (head)
Und jetzt kann ich wieder migrieren.
Um diesen Fehler zu beheben, löschen Sie die neueste Migrationsdatei (eine python Datei)) und versuchen Sie dann erneut, eine Migration durchzuführen.
Um dies zu lösen, lösche ich die zu migrierenden Tabellen und führe diese Befehle aus
flask db migrate
und
flask db upgrade