ошибка команды 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 был.
убедитесь, что вы используете идентификатор миграции файла, который соответствует текущему состоянию вашей базы данных
-
регистрация отсутствует миграция номер
psql=> SELECT * FROM alembic_version; +-------------------------+ | version_num | +-------------------------+ | <the missing migration> | +-------------------------+ (1 row)
-
обновить значение
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>
тогда вы просто будете продолжать иметь ошибки.