2015-08-31 12 views
13

Próbuję użyć alembika do obsługi migracji lokalnych w moim projekcie. To działało po raz pierwszy, ale potem musiałem usunąć folder i restart. (Nie pytajcie dlaczego, po prostu musiałem) Obserwuję this tutorial i uruchomić polecenieBłąd polecenia alembic util nie może znaleźć identyfikatora

python manage.py db init 

i było ok . Ale gdy próbuję uruchomić

python manage.py db migrate 

dostaję ten błąd:

alembic.util.CommandError: Can't locate revision identified by '31b8ab83c7d' 

Teraz wydaje się, że alembic poszukuje zmiany, że nie istnieje już. Czy jest tak, aby alembika zapomnieć o tym pliku? Lub jak ponownie uruchomić porównanie z Brak na -> automatycznie generowane ponownie?

Odpowiedz

39

Alembik przechowuje historię wersji w bazie danych. Dlatego używa wartości przechowywanej w bazie danych, aby wyszukać wersję. Numer wersji dla mojej osobistej bazy danych są przechowywane w tabeli alembic_version:

mysql> SELECT * FROM alembic_version; 
+-------------+ 
| version_num | 
+-------------+ 
| c8ad125e063 | 
+-------------+ 
1 row in set (0.00 sec) 

Podpowiedź: Użyj polecenia SHOW TABLES jeśli jest to baza danych SQL oparty zobaczyć tabele.

Aby rozwiązać problem, wystarczy użyć polecenia:

DROP TABLE alembic_version; 

lub cokolwiek nazwa tabeli wersji bazy danych. A potem trzeba ponownie init folderu migracji za pomocą komendy:

python manage.py db init 

a następnie tworząc nową migracją:

python manage.py db migrate 

I wtedy powinno być dobrze iść z migracji pracujących w alembiku .

+1

Dzięki za odpowiedź. Zadziałało. –

+0

Ogromne dzięki !!!!! –

7

Rozwiązanie SirKaiserKai nie działało dla mnie, prawdopodobnie dlatego, że popełniłem jakiś głupi błąd podczas ostatniej migracji i usunięcia pliku, który powinienem przechowywać.

Zamiast upuszczać tabelę alembic_revision, właśnie zaktualizowałem wartość w version_num, aby dopasować ją do miejsca, w którym wiedziałem, że mój DB jest w pobliżu.

Używaj identyfikatora migracji pliku, który pasuje do aktualnego stanu bazy danych

  1. sprawdzić brakującą liczbę migracji

    psql=> SELECT * FROM alembic_version; 
    +-------------------------+ 
    |  version_num  | 
    +-------------------------+ 
    | <the missing migration> | 
    +-------------------------+ 
    (1 row) 
    
  2. zaktualizować wartość

    psql=> UPDATE alembic_version 
    psql-> SET version_num = '<true state of DB>' 
    psql-> WHERE version_num = '<the missing migration>'; 
    UPDATE 1 
    

Jeśli baza danych znajduje się w stanie innym niż plik migracji <true state of DB>, nadal będą występować błędy.

Powiązane problemy