J'essaie d'utiliser alembic pour gérer les migrations locales sur mon projet. Cela a fonctionné la première fois, mais j'ai ensuite dû supprimer le dossier et redémarrer. (Ne demandez pas pourquoi, je devais juste) Je suis ce tutoriel et j'exécute la commande
python manage.py db init
Et c'était ok. Mais quand j'essaye de courir
python manage.py db migrate
Je reçois cette erreur:
alembic.util.CommandError: Can't locate revision identified by '31b8ab83c7d'
Maintenant, il semble qu'Alembic recherche une révision qui n'existe plus. Il y a de toute façon à faire oublier à alambic ce fichier? Ou comme recommencer la comparaison de Aucun à -> généré automatiquement à nouveau?
Alembic stocke l'historique des versions dans votre base de données. Par conséquent, il utilise la valeur stockée dans votre base de données pour rechercher la révision. Le numéro de version de ma base de données personnelle est stocké dans la table alembic_version
:
mysql> SELECT * FROM alembic_version;
+-------------+
| version_num |
+-------------+
| c8ad125e063 |
+-------------+
1 row in set (0.00 sec)
Astuce: utilisez la commande SHOW TABLES
s'il s'agit d'une base de données SQL pour voir les tables.
Pour résoudre votre problème, utilisez simplement la commande:
DROP TABLE alembic_version;
Ou quel que soit le nom de la table de version de la base de données. Et puis vous devez réinitialiser le dossier de migration à l'aide de la commande:
python manage.py db init
Et puis créer une nouvelle migration:
python manage.py db migrate
Et puis vous devriez être bon pour aller avec des migrations de travail en alambic.
La solution de SirKaiserKai n'a pas fonctionné pour moi, probablement parce que j'ai fait une erreur stupide la dernière fois que j'ai migré et supprimé un fichier que j'aurais dû conserver.
Au lieu de supprimer le alembic_revision
table Je viens de mettre à jour la valeur dans version_num
pour correspondre à l'endroit où je savais que ma BD était.
Assurez-vous d'utiliser l'ID de migration du fichier qui correspond à l'état actuel de votre base de données
Vérifiez le numéro de migration manquant
psql=> SELECT * FROM alembic_version;
+-------------------------+
| version_num |
+-------------------------+
| <the missing migration> |
+-------------------------+
(1 row)
Mettre à jour la valeur
psql=> UPDATE alembic_version
psql-> SET version_num = '<true state of DB>'
psql-> WHERE version_num = '<the missing migration>';
UPDATE 1
Si votre base de données est dans un état autre que le fichier de migration <true state of DB>
alors vous allez continuer à avoir des erreurs. Cependant, vous pouvez exécuter un alembic upgrade head
si la <true state of DB>
est un fichier de migration qui reprend là où vous vous étiez arrêté précédemment, et qui exécuterait également toutes les migrations après cet état.