Alembic可以自动生成列更改吗?

时间:2013-06-18 16:54:53

标签: python postgresql sqlalchemy flask alembic

我能够使用 添加/删除列时的alembic --autogenerate

但是,当我想修改例如200个字符到2000个字符的“url”列时,它不会检测到更改。

如何制作Alembic(使用SQLAlchemy),检测更改并自动生成脚本到我的模型各种列的“大小”,并为PostgreSQL创建“alter_column”命令?

编辑:

为什么不使用alembic自动添加:

op.alter_column('mytable', 'url', type_=sa.String(2000), existing_type=sa.String(length=200), nullable=True)

2 个答案:

答案 0 :(得分: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”。

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

答案 1 :(得分:1)

我也遇到了这个问题,在public String returnConnType() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE); String result = "None"; if (connectivityManager != null) { Network network = connectivityManager.getActiveNetwork(); NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network); if (capabilities == null) { result = "None"; } if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { result = "WIFI"; } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { result = "MOBILE"; } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { result = "VPN"; } } return result; } 文件的alembic 1.0.8函数中的context.configure中,def run_migrations_online()将会是这样:

migrations/env.py

只需删除或评论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