La base de datos de destino no está actualizada

100

Me gustaría realizar una migración para una aplicación Flask. Estoy usando Alembic.

Sin embargo, recibo el siguiente error.

Target database is not up to date.

En línea, leí que tiene algo que ver con esto. http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch

Desafortunadamente, no entiendo cómo actualizar la base de datos y dónde / cómo debo escribir el código que se proporciona en el enlace. Si tiene experiencia con migraciones, ¿podría explicarme esto?

Gracias

GangstaGraham
fuente

Respuestas:

103

Después de crear una migración, ya sea manualmente o como --autogenerate, debe aplicarla con alembic upgrade head. Si usó db.create_all()desde un shell, puede usar alembic stamp headpara indicar que el estado actual de la base de datos representa la aplicación de todas las migraciones.

davidismo
fuente
65

Esto funcionó para mí

$ flask db stamp head
$ flask db migrate
$ flask db upgrade
Nsagha Kingsly
fuente
38

Mi situación es como esta pregunta, cuando ejecuto "./manage.py db migrate -m 'Agregar relación'", el error aparece como este "alembic.util.exc.CommandError: La base de datos de destino no está actualizada".

Entonces verifiqué el estado de mi migración:

(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

¡Y descubrí que las cabezas y la corriente son diferentes!

Lo arreglé haciendo estos pasos:

(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

Y ahora la corriente es la misma en la cabeza

(venv) ]#./manage.py db current
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
d996b44eca57 (head)

Y ahora puedo hacer la migración nuevamente.

LittleLogic
fuente
Funciona de maravilla ! ¡Creo que esta es la mejor manera de gestionar este problema!
attaboyabhipro
¡Igual que aquí! Trabajó sin problemas. Sabía que tenía que ver con db heads y current, pero no sabía que había un comando "stamp". ¡Gracias!
Subspacian
10

Esto se puede solucionar de muchas formas:

1 Para corregir este error, elimine el último archivo de migración (un archivo de Python) y luego intente realizar una migración de nuevo.

Si el problema persiste, pruebe estos comandos:

$ flask db stamp head  # To set the revision in the database to the head, without performing any migrations. You can change head to the required change you want.
$ flask db migrate     # To detect automatically all the changes.
$ flask db upgrade     # To apply all the changes.
Anupam Haldkar
fuente
8

Tuve que eliminar algunos de mis archivos de migración por alguna razón. No estoy seguro de por qué. Pero eso solucionó el problema, algo así.

Un problema es que la base de datos termina actualizándose correctamente, con todas las tablas nuevas, etc., pero los archivos de migración en sí mismos no muestran ningún cambio cuando uso la migración automática.

Si alguien tiene una mejor solución, hágamelo saber, ya que en este momento mi solución es un poco hacky.

GangstaGraham
fuente
Sé que es un poco antiguo ahora, pero ¿sus tablas heredan de Base? Tuve el mismo problema y la migración automática no estaba recogiendo cambios debido al hecho de que mis nuevas tablas no heredaban de Base donde está la base Base = declarative_base() y también recuerdofrom sqlalchemy.ext.declarative import declarative_base
7
$ flask db stamp head  # To set the revision in the database to the head, without performing any migrations. You can change head to the required change you want.
$ flask db migrate  # To detect automatically all the changes.
$ flask db upgrade  # To apply all the changes.

Puede encontrar más información en la documentación https://flask-migrate.readthedocs.io/en/latest/

Sergi Ramón
fuente
2

También me encontré con diferentes cabezas y quería cambiar uno de los campos de cadena a entero, así que primero ejecute:

$ flask db stamp head # to make the current the same
$ flask db migrate
$ flask db upgrade

¡Ya está resuelto!

Serg
fuente
1

Esto también puede suceder si usted, como yo, acaba de comenzar un nuevo proyecto y está utilizando una base de datos SQLite en memoria ( sqlite:///:memory:). Si aplica una migración en una base de datos de este tipo, obviamente la próxima vez que quiera decir autogenerar una revisión, la base de datos seguirá en su estado original (vacía), por lo que alambic se quejará de que la base de datos de destino no está a la altura fecha. La solución es cambiar a una base de datos persistente.

jbasko
fuente
0

Para corregir este error, elimine el último archivo de migración (un archivo de Python) y luego intente realizar una migración de nuevo.

Patrick Mutuku
fuente
-2

Intente eliminar todas las tablas antes de ejecutar el comando db upgrade.

Rafael Rotiroti
fuente
-6

Para resolver esto, dejo caer (elimino) las tablas en la migración y ejecuto estos comandos

flask db migrate

y

flask db upgrade
fill_J
fuente