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, ...)