Moje stwierdzenie jest podobne do tego pytania: Kiedy wykonuję polecenie „./manage.py db migrate -m 'Dodaj relację'”, pojawił się błąd, taki jak „alembic.util.exc.CommandError: Docelowa baza danych nie jest aktualna”.
Sprawdziłem więc stan mojej migracji:
(venv) ]
d996b44eca57 (head)
(venv) ]
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
715f79abbd75
i stwierdziłem, że głowy i prąd są różne!
Naprawiłem to, wykonując następujące kroki:
(venv)]
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
A teraz prąd jest taki sam na głowie
(venv) ]
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
d996b44eca57 (head)
A teraz mogę ponownie przeprowadzić migrację.
Można to rozwiązać na wiele sposobów:
1 Aby naprawić ten błąd, usuń najnowszy plik migracji (plik Pythona), a następnie spróbuj wykonać migrację od nowa.
Jeśli problem nadal występuje, wypróbuj te polecenia:
$ 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.
źródło
Z jakiegoś powodu musiałem usunąć niektóre pliki migracji. Nie pewny dlaczego. Ale to rozwiązało problem.
Jednym z problemów jest to, że baza danych jest aktualizowana prawidłowo, wraz ze wszystkimi nowymi tabelami itp., Ale same pliki migracji nie pokazują żadnych zmian, gdy używam automigracji.
Jeśli ktoś ma lepsze rozwiązanie, daj mi znać, ponieważ teraz moje rozwiązanie jest trochę hakerskie.
źródło
Base = declarative_base()
a także pamiętamfrom sqlalchemy.ext.declarative import declarative_base
$ 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.
Więcej informacji można znaleźć w dokumentacji https://flask-migrate.readthedocs.io/en/latest/
źródło
Ja też wpadłem na różne głowy i chciałem zmienić jedno z pól ze string na integer, więc najpierw uruchom:
$ flask db stamp head # to make the current the same $ flask db migrate $ flask db upgrade
To już rozwiązane!
źródło
Może się to również zdarzyć, jeśli tak jak ja właśnie rozpocząłeś nowy projekt i używasz bazy danych SQLite w pamięci (
sqlite:///:memory:
). Jeśli zastosujesz migrację do takiej bazy danych, oczywiście następnym razem, gdy chcesz powiedzieć, że automatycznie wygenerujesz wersję, baza danych będzie nadal w swoim pierwotnym stanie (pusta), więc alembic będzie narzekał, że docelowa baza danych nie jest w stanie data. Rozwiązaniem jest przejście do utrwalonej bazy danych.źródło
Aby naprawić ten błąd, usuń najnowszy plik migracji (plik pythona), a następnie spróbuj wykonać migrację od nowa.
źródło
Spróbuj usunąć wszystkie tabele przed wykonaniem komendy db upgrade.
źródło
Aby rozwiązać ten problem, upuszczam (usuwam) tabele podczas migracji i uruchamiam te polecenia
i
źródło