SQLAlchemy+Alembic+PostGIS环境下如何避免误删其他Schema表?
解决Alembic自动生成迁移时误删其他Schema表的问题
问题根源是Alembic的自动迁移默认会扫描数据库中所有Schema的表,而tiger这类PostGIS自带的Schema不在你的本地models.py定义里,所以它会判定这些表是“多余的”,进而生成删除语句。你可以通过以下方法限制Alembic只关注你需要的Schema:
方法:修改Alembic的env.py文件,过滤指定Schema
找到项目中alembic/env.py文件,定位到run_migrations_online函数里的context.configure配置块,添加自定义的过滤规则:
# 先定义过滤函数,只保留指定Schema的对象 def include_object(object, name, type_, reflected, compare_to): # 仅处理screech Schema下的表 if type_ == "table": return object.schema == "screech" # 非表对象(如序列、约束)默认保留,可按需调整规则 return True # 修改context.configure的配置,加入过滤规则 context.configure( connection=connection, target_metadata=target_metadata, # 保留原有参数,新增以下两个配置 include_schemas=True, include_object=include_object, # 其他已有的参数(如render_as_batch=True等)保持不变 )
修改完成后,重新执行alembic revision --autogenerate -m "Create table advs",生成的迁移文件就只会包含screech Schema下的表操作,不会再出现tiger等其他Schema的删除语句了。
内容的提问来源于stack exchange,提问作者Luca Rasconi
相关产品推荐
相关产品推荐

