web-dev-qa-db-fra.com

La base de données cible n'est pas à jour

J'aimerais faire une migration pour une application Flask. J'utilise Alembic.

Cependant, je reçois l'erreur suivante.

Target database is not up to date.

En ligne, j'ai lu que cela avait quelque chose à voir avec cela. http://alembic.zzzcomputing.com/en/latest/cookbook.html#building-an-up-to-date-database-from-scratch

Malheureusement, je ne comprends pas très bien comment mettre la base de données à jour et où/comment écrire le code indiqué dans le lien. Si vous avez de l'expérience avec les migrations, pouvez-vous s'il vous plaît expliquer cela pour moi

Merci

47
GangstaGraham

Après avoir créé une migration, manuellement ou en tant que --autogenerate, vous devez l’appliquer avec alembic upgrade head. Si vous avez utilisé db.create_all() à partir d'un shell, vous pouvez utiliser alembic stamp head pour indiquer que l'état actuel de la base de données représente l'application de toutes les migrations.

62
davidism

J'ai dû supprimer certains de mes fichiers de migration pour une raison quelconque. Pas certain de pourquoi. Mais cela a réglé le problème, en quelque sorte.

Un problème est que la base de données finit par être mise à jour correctement, avec toutes les nouvelles tables, etc., mais les fichiers de migration eux-mêmes ne montrent aucune modification lorsque j'utilise automigrate.

Si quelqu'un a une meilleure solution, s'il vous plaît faites le moi savoir, car maintenant ma solution est une sorte de hacky.

8
GangstaGraham

Mon statut correspond à la question suivante: Lorsque j'exécute "./manage.py db migrate -m" Ajouter une relation "", l'erreur est telle que " Alembic.util.exc.CommandError: La base de données cible n'est pas à jour . "

J'ai donc vérifié l'état de ma migration:

(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

et a constaté que les têtes et le courant sont différents!

Je l'ai corrigé en procédant comme suit:

(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

Et maintenant le courant est identique à la tête

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

Et maintenant je peux refaire la migration.

3
LittleLogic

Pour résoudre ce problème, je supprime (supprime) les tables de la migration et lance ces commandes.

flask db migrate

et 

flask db upgrade
0
fill_J