How can I ignore certain schemas with alembic --autogenerate
Based on Oin response, finally a method which ignores tables while running db revision --autogenerate
In alembic/env.py or migrations/env.py:
def include_object(object, name, type_, reflected, compare_to):
if (type_ == "table" and object.schema == "exclude_from_migrations"):
return False
else:
return True
In alembic/env.py or migrations/env.py:
def run_migrations_online():
....
context.configure(connection=connection,
target_metadata=target_metadata,
include_object = include_object,
process_revision_directives=process_revision_directives,
**current_app.extensions['migrate'].configure_args)
...
Now in the tables that you want to ignore:
class MyClass(db.Model):
__tablename__='my_class'
__table_args__ = {"schema": "exclude_from_migrations"}
Try use include_name
: https://alembic.sqlalchemy.org/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params.include_name
This is a new hook added in alembic==1.5, and is the recommended way to filter out schemas during autogenerate
:
For the use case of omitting specific schemas from a target database when EnvironmentContext.configure.include_schemas is set to True, the schema attribute can be checked for each Table object passed to the hook, however it is much more efficient to filter on schemas before reflection of objects takes place using the EnvironmentContext.configure.include_name hook.
Related discussion: https://github.com/sqlalchemy/alembic/issues/650
It seems I can use include_object
in conjunction with include_schemas
In alembic/env.py
:
def include_object(object, name, type_, reflected, compare_to):
if type_ == 'table' and object.schema != MY_SCHEMA:
return False
return True
...
context.configure(..., include_object=include_object, ...)