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

Make Alembic detect column type changes and change the length of string fields

Auto Detect does not detect column type changes by default. You must turn this on by editing the alembic/env.py file.

9 March 2019 Updated 28 August 2019
post main image

By default Alembic does not change the length of string fields, I noticed this after changing a string field from:

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

to:

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

No changes were made.

It appears that column type change detection is off by default, so you can test it first, and can be turned on by adding 'compare_type=True' to the context.
Edit the alembic/env.py file and add 'compare_type=True' at two places:

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

Now the column type changes will be detected and properly migrated.

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

Leave a comment

Comment anonymously or log in to comment.

Comments (1)

Leave a reply

Reply anonymously or log in to reply.

avatar

good! Thanks