Skip to content

Gère les migrations de schéma de base de données avec alembic

Ronan Amicel requested to merge migrations-alembic into main

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 et psycopg2-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éma meta et non public
  • ajoute la migration initiale qui crée les tables meta, meta_imports et exsitu
  • 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

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.

Edited by Ronan Amicel

Merge request reports