[PYTHON] Mémo d'introduction d'Alembic (DB Schema Management Tool)

Je ne veux pas être épuisé par l'écriture manuscrite des scripts de mise à niveau et de rétrogradation pour la migration, j'ai donc présenté Alembic.

Alembic est un bel outil qui génère automatiquement des différences de mise à niveau et de rétrogradation par rapport au script de migration SQL Alchemy et à l'état du serveur.

Installation

L'installation se termine par pip

pip install sqlalchemy
pip install alembic

Il est nécessaire d'installer le pilote SQL pour python en fonction du SQL que vous utilisez (vous devez pouvoir vous connecter au serveur SQL pour faire la différence avec le serveur)

Cette fois, je l'ai utilisé dans MySQL.

pip install pymysql

Réglage initial

Créez un répertoire de travail avec la commande alembic init.

alembic init [Nom du répertoire de travail]

Le fichier alembic.ini et le répertoire de travail spécifié sont créés. Il y a un fichier de paramètres appelé env.py dans le répertoire de travail, alors éditez ce fichier et deux fichiers, alembic.ini.

Tout d'abord, alembic.ini décrit les paramètres de connexion à MySQL. Réécrivez sqlalchemy.url.

sqlalchemy.url = mysql+pymysql://Nom d'utilisateur:mot de passe@nom d'hôte:Port/Nom de la base de données
※:Le nom du port est facultatif

Vous devez spécifier jusqu'au nom de la base de données. Étant donné que vous pouvez préparer plusieurs fichiers ini et les utiliser correctement lors de l'exécution, vous pouvez le gérer en préparant un fichier ini pour chaque base de données.

Réécrivez ensuite env.py dans votre répertoire de travail. Puisqu'il y a une ligne de commentaire # ajoutez ici l'objet MetaData de votre modèle, enregistrez une instance de la classe MetaData du script de définition de base de données pour SQLAlchemy pour la variable target_metadata en dessous.

Cela peut être un peu déroutant, donc tout d'abord, le script de définition de base de données pour l'exemple SQLAlchemy

sample.py


from sqlalchemy import MetaData, Table, Column, Integer, String, DateTime, Float, Boolean, Text
from sqlalchemy.dialects.mysql import TINYINT, SMALLINT

meta = MetaData()

Table(
  'status', meta,
  Column('account_id', Integer, primary_key=True, autoincrement=False),
  Column('hp', SMALLINT, nullable=False, server_default='30'),
  Column('weapon_id', SMALLINT, nullable=False, server_default='1'),
  Column('weapon_lv', TINYINT, nullable=False, server_default='0'),
  Column('armor_id', SMALLINT, nullable=False, server_default='1'),
  Column('armor_lv', TINYINT, nullable=False, server_default='0'),
)

S'il y avait,

env.py


# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
import sample
target_metadata = sample.meta

Écrivez comme ça.

Génération de script de migration

Pour importer le fichier sample.py, vous devez spécifier l'emplacement du fichier dans PYTHONPATH. Même s'il est actuel, vous devez le spécifier.

PYTHONPATH=. alembic revision --autogenerate

Lors de la préparation de plusieurs alembic.ini, modifiez le nom du fichier, puis spécifiez-le avec l'option --config.

PYTHONPATH=. alembic --révision du fichier config ini--autogenerate

En ajoutant --autogenerate, la différence entre le serveur actuel et le script SQLAlchemy spécifié est prise dans le répertoire appelé versions dans le répertoire de travail, et le script comprenant la mise à niveau et la rétrogradation est automatiquement généré.

Ensuite, modifiez le fichier source de la migration spécifié dans le fichier ini et générez un fichier de différences avec la commande de révision alambic. Même si vous faites une erreur et faites un script de réglage étrange, vous pouvez dire que si vous venez de le faire, vous n'avez pas simplement supprimé le fichier généré.

S'applique au serveur

Les scripts créés avec la révision d'alambic peuvent être appliqués au serveur à l'aide de la mise à niveau d'alambic. Vous pouvez mettre à niveau ou rétrograder vers n'importe quelle révision de votre choix, mais la plupart du temps, vous mettrez à jour avec la dernière version. Spécifiez la tête à mettre à jour vers la dernière version.

PYTHONPATH=. alembic --tête de mise à niveau du fichier config ini

Correction lorsque la version est incorrecte

alembic est une gestion de version simple qui crée une table appelée alembic_version dans DB et stocke le nom du fichier (à l'exclusion du dernier _) dans version_num.

Ainsi, si vous définissez le dernier nom de fichier dans les versions sur version_num après avoir ajusté la base de données à la dernière version, il n'y aura pas d'écart de version.

Si vous supprimez le script dans les versions sous le répertoire de travail et la table alembic_version dans la base de données, vous pouvez supposer qu'il n'y avait pas de réglage par alembic.

Recommended Posts

Mémo d'introduction d'Alembic (DB Schema Management Tool)
mémo d'introduction tensorflow-gpu
Mémo d'introduction H2O.ai
note d'introduction à la poésie (ubuntu18.04)
Mémo PyTorch (gestion des dimensions)