Подтвердить что ты не робот

Целевая база данных не обновляется

Я хотел бы сделать миграцию для приложения 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

К сожалению, я не совсем понимаю, как обновлять базу данных и где/как я должен писать код, указанный в ссылке. Если у вас есть опыт миграции, можете ли вы объяснить это мне?

Спасибо

4b9b3361

Ответ 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.