ошибка команды alembic util не может найти идентификатор

Я пытаюсь использовать перегонный куб для обработки локальных миграций в моем проекте. Это сработало в первый раз, но затем мне нужно было удалить папку и перезапустить.(не спрашивайте, почему, я просто должен был) я после в этом уроке и я запускаю команду

python manage.py db init

и все было в порядке. Но когда я пытаюсь бежать

python manage.py db migrate

Я получаю эту ошибку:

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

Теперь кажется, что перегонный куб ищет ревизию, которая больше не существует. Есть в любом случае заставить перегонный куб забыть этот файл? Или, как перезапустить сравнение из None в - > автоматически сгенерированный снова?

2 ответов


перегонный куб хранит историю версий в базе данных. Поэтому он использует значение, хранящееся в вашей базе данных, для поиска ревизии. Номер версии для моей личной базы данных хранится в таблице alembic_version:

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

подсказка: используйте команду SHOW TABLES если это база данных на основе SQL, чтобы увидеть таблицы.

чтобы решить вашу проблему просто используйте команду:

DROP TABLE alembic_version;

или как там называется таблица версий базы данных. И тогда вам нужно re-init папка миграции с помощью команды:

python manage.py db init

а затем создание новой миграции:

python manage.py db migrate

и тогда вам должно быть хорошо идти с рабочими миграциями в перегонный куб.


решение SirKaiserKai не сработало для меня, вероятно, потому, что я сделал какую-то глупую ошибку в прошлый раз, когда я мигрировал и удалил файл, который я должен был сохранить.

вместо падения alembic_revision таблица я только что обновил значение version_num чтобы соответствовать, где я знал, что мой DB был.

убедитесь, что вы используете идентификатор миграции файла, который соответствует текущему состоянию вашей базы данных

  1. регистрация отсутствует миграция номер

    psql=> SELECT * FROM alembic_version;
    +-------------------------+
    |      version_num        |
    +-------------------------+
    | <the missing migration> |
    +-------------------------+
    (1 row)
    
  2. обновить значение

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

если ваша база данных находится в состоянии, отличном от переноса файла <true state of DB> тогда вы просто будете продолжать иметь ошибки.