문제

I was able to use alembic --autogenerate for when adding / removing columns.

However, when I wanted to modify for example a "url" column from 200 characters to 2000 characters, it doesn't detect the change.

How can I make Alembic (using SQLAlchemy), detect changes and autogenerate scripts to my model's "sizes" of various columns and create "alter_column" commands for PostgreSQL ??

Edit:

Why doesn't alembic automatically add:

op.alter_column('mytable', 'url', type_=sa.String(2000), existing_type=sa.String(length=200), nullable=True)
도움이 되었습니까?

해결책

Looks like I found the answer on reddit's /r/flask.

http://www.reddit.com/r/flask/comments/1glejl/alembic_autogenerate_column_changes/cale9o0

Just add "compare_type=True" to context.configure() parameters inside your env.py's "run_migrations_online" function.

    context.configure(
                connection=connection,
                target_metadata=target_metadata,
                compare_type=True
                )

다른 팁

I also faced this issue, and on alembic 1.0.8 the context.configure in def run_migrations_online() function on migrations/env.py file will be like this:

with connectable.connect() as connection:
    context.configure(
        connection=connection,
        target_metadata=target_metadata,
        process_revision_directives=process_revision_directives,
        **current_app.extensions['migrate'].configure_args,
    )

Just remove or comment theprocess_revision_directives=process_revision_directives and then add the compare_type=True on that.

Like this:

with connectable.connect() as connection:
    context.configure(
        connection=connection,
        target_metadata=target_metadata,
        # process_revision_directives=process_revision_directives,
        **current_app.extensions['migrate'].configure_args,
        compare_type=True
    )
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top