如何使用alembic忽略某些模式--autogenerate

时间:2016-02-11 14:42:49

标签: python sqlalchemy database-migration alembic

我有一个图书馆,它是更大项目的一部分。该库在与较大项目共享的(PostgreSQL)数据库中使用自己的模式。

我想使用alembic revision --autogenerate仅生成库架构的迁移,并忽略对main / default架构中表的更改。这样做有什么选择吗?

FWIW,我在env.py中尝试了include_schemas=False参数到context.configure,但似乎没有做任何事情。

2 个答案:

答案 0 :(得分:7)

我似乎可以将include_objectinclude_schemas

结合使用

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

答案 1 :(得分:0)

基于Oin的响应,最后是一种在运行db版本--autogenerate时忽略表的方法

在alembic / env.py或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

在alembic / env.py或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)
   ...

现在要忽略的表中:

class MyClass(db.Model):
__tablename__='my_class'
__table_args__ = {"schema": "exclude_from_migrations"}