Gère les migrations de schéma de base de données avec alembic
Problème
Actuellement c’est l’application qui s’occupe de créer les tables de gestion meta
, meta_imports
et exsitu
.
On n’a pas de mécanismes de migration pour gérer les évolutions du schéma de ces tables.
Dans !399 (merged) on avait ajouté une nouvelle table, sans toucher aux existantes, donc pas de souci.
Dans !451 (merged) par contre on commence à vouloir changer la structure, donc ce serait utile d’avoir un mécanisme pour gérer la migration.
Solution
Je propose d’utiliser Alembic, qui est l’outil le plus couramment utilisé pour ça dans le monde Python, et que je connais par ailleurs assez bien.
Contenu
- ajoute
alembic
etpsycopg2-binary
aux dépendances - ajoute la config Alembic, avec les personnalisations suivantes :
- on récupère l’emplacement de la base de données à partir de la config insitu
- on met la table
alembic_version
dans le schémameta
et nonpublic
- ajoute la migration initiale qui crée les tables
meta
,meta_imports
etexsitu
- retire les hooks précédemment responsables de la création de ces tables
- tests: met à jour les fixtures
- avant chaque test qui a besoin de la base de données :
- on établit une connexion à la base
- on exécute les hooks
- on supprime les éventuelles tables existantes pour repartir de zéro
- on joue les migrations pour créer les tables de gestion
- à la fin du test :
- on ferme la connexion
- avant chaque test qui a besoin de la base de données :
Instructions
Pour une base de données vierge, il faudra faire alembic upgrade heads
à l’installation.
Pour une base de données existante, qui contient déjà ces tables, il faudra faire plutôt alembic stamp heads
.