Целевая база данных не обновляется
Я хотел бы сделать миграцию для приложения Flask. Я использую Alembic.
Однако, я получаю следующую ошибку.
Target database is not up to date.
В Интернете я читал, что это как-то связано с этим. http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch
К сожалению, я не совсем понимаю, как обновлять базу данных и где/как я должен писать код, указанный в ссылке. Если у вас есть опыт миграции, можете ли вы объяснить это мне?
Спасибо
Ответы
Ответ 1
После создания переноса, либо вручную, либо как --autogenerate
, вы должны применить его с помощью alembic upgrade head
. Если вы использовали db.create_all()
из оболочки, вы можете использовать alembic stamp head
, чтобы указать, что текущее состояние базы данных представляет собой приложение всех миграций.
Ответ 2
По какой-то причине мне пришлось удалить некоторые из моих файлов миграции. Не знаю, почему. Но это фиксировало проблему, вроде.
Одна из проблем заключается в том, что база данных заканчивается тем, что она обновляется должным образом, со всеми новыми таблицами и т.д., но сами файлы миграции не отображают никаких изменений, когда я использую automigrate.
Если у кого-то есть лучшее решение, сообщите мне об этом, так как прямо сейчас мое решение является хакерским.
Ответ 3
Моя жалоба походит на этот вопрос. Когда я выполняю "./manage.py db migrate -m" Добавить отношения ", ошибка повторяется так:" База данных alembic.util.exc.CommandError: Target не обновляется ".
Поэтому я проверил статус моей миграции:
(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
и обнаружили, что головы и ток разные!
Я исправил это, выполнив следующие действия:
(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
И теперь ток тот же, что и в голове
(venv) ]#./manage.py db current
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
d996b44eca57 (head)
И теперь я могу снова мигрировать.
Ответ 4
Чтобы устранить эту ошибку, удалите последний файл миграции (файл python), затем попробуйте выполнить перенастройку заново.
Ответ 5
Попробуйте удалить все таблицы перед выполнением команды обновления db.