angle-uparrow-clockwisearrow-counterclockwisearrow-down-uparrow-leftatcalendarcard-listchatcheckenvelopefolderhouseinfo-circlepencilpeoplepersonperson-fillperson-plusphoneplusquestion-circlesearchtagtrashx

Make Alembic détecte les changements de type de colonne et modifie la longueur des champs de chaîne de caractères

La détection automatique ne détecte pas les changements de type de colonne par défaut. Vous devez l'activer en éditant le fichier alembic/env.py.

9 mars 2019
post main image

Par défaut, Alembic ne change pas la longueur des champs de chaîne de caractères, j'ai remarqué ceci après avoir changé un champ de chaîne de caractères de :

description = Column(String(150), server_default='')

à :

description = Column(String(250), server_default='')

Aucun changement n'a été apporté.

Il semble que la détection de changement de type de colonne est désactivée par défaut, vous pouvez donc la tester en premier, et vous pouvez l'activer en ajoutant'compare_type=True' au contexte.
Editez le fichier alambic/env.py et ajoutez'compare_type=True' à deux endroits :

def run_migrations_offline():
    ...
    context.configure(
        url=url, target_metadata=target_metadata, literal_binds=True,
        compare_type=True # <--- here
    )
    ...


def run_migrations_online():
    ...
    with connectable.connect() as connection:
        context.configure(
            connection=connection,
            target_metadata=target_metadata,
            compare_type=True # <--- here
        )
    ...

Maintenant, les changements de type de colonne seront détectés et correctement migrés.

Liens / crédits

Alembic - migration for String length change
https://eshlox.net/2017/08/06/alembic-migration-for-string-length-change

Auto Generating Migrations
https://alembic.sqlalchemy.org/en/latest/autogenerate.html#what-does-autogenerate-detect-and-what-does-it-not-detect

En savoir plus...

Alembic SQLAlchemy

Laissez un commentaire

Commentez anonymement ou connectez-vous pour commenter.

Commentaires (1)

Laissez une réponse

Répondez de manière anonyme ou connectez-vous pour répondre.

avatar

good! Thanks