Maak Alembic kolomtypewijzigingen detecteren en de lengte van de tekenreeksenvelden wijzigen

9 maart 2019 door Peter
In

Auto Detect detecteert standaard geen kolomtypewijzigingen. U moet dit aanzetten door het alembic/env.py bestand aan te passen.

post main image

Standaard verandert Alembic de lengte van de stringvelden niet, dit viel me op na het veranderen van een stringveld van:

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

aan:

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

Er zijn geen wijzigingen aangebracht.

Het blijkt dat de detectie van kolomtype verandering standaard uitgeschakeld is, zodat u het eerst kunt testen, en kan worden ingeschakeld door 'compare_type=True' toe te voegen aan de context.
Bewerk het bestand alembic/env.py en voeg op twee plaatsen 'compare_type=True' toe:

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
        )
    ...

Nu worden de wijzigingen in het kolomtype gedetecteerd en op de juiste manier gemigreerd.

Links / credits

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