为避免Alembic autogenerate重新创建已存在的索引,需要在alembic/env.py文件中进行配置。可以添加以下代码:
from alembic.autogenerate import compare_metadata
def include_object(object_, name, type_, reflected, compare_to):
if type_ == "index":
return False
else:
return True
def run_migrations_online():
...
context.configure(connection=connection,
target_metadata=target_metadata,
process_revision_directives=compare_metadata,
**current_app.extensions['migrate'].configure_args)
...
在这里定义了一个include_object函数,用于确定要包含在比较中的对象。该函数返回False,以排除索引对象。然后将process_revision_directives参数设置为compare_metadata函数。
这些配置修改之后,Alembic autogenerate仅检测并创建新的索引。现有索引将不会被修改或重新创建。