首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Alembic可以自动生成列变更吗?

Alembic可以自动生成列变更吗?
EN

Stack Overflow用户
提问于 2013-06-19 00:54:53
回答 2查看 8.7K关注 0票数 34

在添加/删除列时,我可以使用alembic --autogenerate

但是,当我想要将"url“列从200个字符修改为2000个字符时,它没有检测到更改。

如何创建Alembic (使用SQLAlchemy),检测各种列的模型“大小”的变化并自动生成脚本,以及为PostgreSQL创建"alter_column“命令?

编辑:

为什么alembic不自动添加:

代码语言:javascript
复制
op.alter_column('mytable', 'url', type_=sa.String(2000), existing_type=sa.String(length=200), nullable=True)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-19 03:03:41

看起来我在reddit的/r/flask上找到了答案。

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

只需在env.py的"run_migrations_online“函数内的context.configure()参数中添加"compare_type=True”即可。

代码语言:javascript
复制
    context.configure(
                connection=connection,
                target_metadata=target_metadata,
                compare_type=True
                )
票数 67
EN

Stack Overflow用户

发布于 2019-08-06 22:14:53

我也遇到过这个问题,在alembic 1.0.8上,migrations/env.py文件上的context.configure in def run_migrations_online()函数将如下所示:

代码语言:javascript
复制
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,
    )

只需删除或注释process_revision_directives=process_revision_directives,然后在上面添加compare_type=True即可。

如下所示:

代码语言:javascript
复制
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
    )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17174636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档