在Alembic + SQLAlchemy中使用反映的表自动迁移

时间:2018-07-06 16:49:04

标签: sqlalchemy flask-sqlalchemy alembic

我正在为我们的项目设置Alembic,这已经很大了,并且有很多桌子。事实是,我们的项目的数据库已经通过SQL进行了很长时间的管理,并且我们的炼金术模型几乎都是这样反映的(我掩盖了名称,但其余的都直接来自我们的代码) :

class SomeModel(Base, BaseModelMixin):
    """
    Model docstring
    """

    """Reflect Table"""
    __table__ = Table('some_models', metadata, autoload=True)

发生的事情是,当我创建自动迁移时,出于某种原因会创建很多放置表(和创建表)操作。我以为是因为模型类没有显式定义表,但是我不明白为什么这也会删除表。

在确保在target_metadata中设置env.py变量之前,我确保已处理所有模型定义:

# this imports every model in our app

from shiphero_app.utils.sql_dependencies import import_dependencies
import_dependencies()

from shiphero_app.core.database import Base
target_metadata = Base.metadata

关于我在这里可能会缺少什么的任何想法?

1 个答案:

答案 0 :(得分:0)

这可能是您要寻找的-这使Alembic忽略预定义的表: https://alembic.sqlalchemy.org/en/latest/cookbook.html#don-t-generate-any-drop-table-directives-with-autogenerate

不幸的是,这也阻止了Alembic删除作用域内的表