Die Zieldatenbank ist nicht aktuell

101

Ich möchte eine Migration für eine Flask-App durchführen. Ich benutze Alembic.

Ich erhalte jedoch den folgenden Fehler.

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 soll und wo / wie ich den im Link angegebenen Code schreiben soll. Wenn Sie Erfahrung mit Migrationen haben, können Sie mir dies bitte erklären

Vielen Dank

GangstaGraham
quelle

Antworten:

104

Nachdem Sie eine Migration entweder manuell oder als erstellt haben --autogenerate, müssen Sie sie mit anwenden alembic upgrade head. Wenn Sie db.create_all()von einer Shell aus verwendet haben, können Sie alembic stamp headangeben, dass der aktuelle Status der Datenbank die Anwendung aller Migrationen darstellt.

Davidismus
quelle
65

Das hat bei mir funktioniert

$ flask db stamp head
$ flask db migrate
$ flask db upgrade
Nsagha Kingsly
quelle
38

Meine Einstellung ist wie folgt: Wenn ich "./manage.py db migrate -m 'Beziehung hinzufügen'" ausführe, tritt der Fehler wie folgt auf: "alembic.util.exc.CommandError: Zieldatenbank ist nicht aktuell."

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 die Strömung unterschiedlich sind!

Ich habe es mit den folgenden 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 die Strömung für den 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.

LittleLogic
quelle
Klappt wunderbar ! Ich denke, dies ist der beste Weg, um dieses Problem zu lösen!
Attaboyabhipro
Hier gilt das gleiche! Arbeitete reibungslos. Ich wusste, dass es mit DB-Köpfen und Strom zu tun hatte, wusste aber nicht, dass es einen "Stempel" -Befehl gibt. Vielen Dank!
Subspacian
10

Dies kann auf viele Arten gelöst werden:

1 Um diesen Fehler zu beheben, löschen Sie die neueste Migrationsdatei (eine Python-Datei) und versuchen Sie erneut, eine Migration durchzuführen.

Wenn das Problem weiterhin besteht, versuchen Sie Folgendes:

$ flask db stamp head  # To set the revision in the database to the head, without performing any migrations. You can change head to the required change you want.
$ flask db migrate     # To detect automatically all the changes.
$ flask db upgrade     # To apply all the changes.
Anupam Haldkar
quelle
8

Ich musste aus irgendeinem Grund einige meiner Migrationsdateien löschen. Nicht sicher warum. Aber das hat das Problem irgendwie behoben.

Ein Problem ist, dass die Datenbank mit allen neuen Tabellen usw. ordnungsgemäß aktualisiert wird, die Migrationsdateien selbst jedoch keine Änderungen aufweisen, wenn ich die automatische Migration verwende.

Wenn jemand eine bessere Lösung hat, lassen Sie es mich bitte wissen, da meine Lösung im Moment irgendwie hackig ist.

GangstaGraham
quelle
Ich weiß, dass es jetzt ein bisschen alt ist, aber erben Ihre Tabellen von Base? Ich hatte das gleiche Problem und Automigrate nahm keine Änderungen auf, da meine neuen Tabellen nicht von Base Base = declarative_base() from sqlalchemy.ext.declarative import declarative_base
7
$ flask db stamp head  # To set the revision in the database to the head, without performing any migrations. You can change head to the required change you want.
$ flask db migrate  # To detect automatically all the changes.
$ flask db upgrade  # To apply all the changes.

Weitere Informationen finden Sie in der Dokumentation https://flask-migrate.readthedocs.io/en/latest/

Sergi Ramón
quelle
2

Ich bin auch auf verschiedene Köpfe gestoßen und wollte eines der Felder von Zeichenfolge in Ganzzahl ändern, also zuerst ausführen:

$ flask db stamp head # to make the current the same
$ flask db migrate
$ flask db upgrade

Es ist jetzt gelöst!

Serg
quelle
1

Dies kann auch passieren, wenn Sie wie ich gerade ein neues Projekt gestartet haben und die speicherinterne SQLite-Datenbank ( sqlite:///:memory:) verwenden. Wenn Sie eine Migration auf eine solche Datenbank anwenden, befindet sich die Datenbank beim nächsten Mal, wenn Sie sagen möchten, dass eine Revision automatisch generiert wird, immer noch im ursprünglichen Zustand (leer), sodass sich alembic beschwert, dass die Zieldatenbank nicht den Anforderungen entspricht Datum. Die Lösung besteht darin, zu einer dauerhaften Datenbank zu wechseln.

jbasko
quelle
0

Um diesen Fehler zu beheben, löschen Sie die neueste Migrationsdatei (eine Python-Datei) und versuchen Sie dann, eine erneute Migration durchzuführen.

Patrick Mutuku
quelle
-2

Versuchen Sie, alle Tabellen zu löschen, bevor Sie den Befehl db upgrade ausführen.

Rafael Rotiroti
quelle
-6

Um dies zu lösen, lösche (lösche) ich die Tabellen in der Migration und führe diese Befehle aus

flask db migrate

und

flask db upgrade
fill_J
quelle