【问题标题】:Getting Flask-Migrate to Ignore SQL Views that are mapped as Flask-SQLAlchemy Models让 Flask-Migrate 忽略映射为 Flask-SQLAlchemy 模型的 SQL 视图
【发布时间】:2017-02-01 21:21:13
【问题描述】:

我正在使用 Flask-SQLAlchemy 定义我的模型,然后使用 Flask-Migrate 自动生成迁移脚本以部署到 PostgreSQL 数据库。我在我的应用程序中使用的数据库上定义了许多 SQL 视图,如下所示。

但是,Flask-Migrate 现在会为视图生成一个迁移文件,因为它认为它是一个表。如何正确让 Flask-Migrate / Alembic 在自动生成期间忽略视图?

SQL 视图名称:vw_SampleView,包含两列:idrowcount

class ViewSampleView(db.Model):
    __tablename__ = 'vw_report_high_level_count'

    info = dict(is_view=True)

    id = db.Column(db.String(), primary_key=True)
    rowcount = db.Column(db.Integer(), nullable=False)

这意味着我现在可以进行这样的查询:

ViewSampleView.query.all()

我尝试按照http://alembic.zzzcomputing.com/en/latest/cookbook.html 上的说明进行操作,并将info = dict(is_view=True) 部分添加到我的模型中,并将以下位添加到我的env.py 文件中,但不知道从哪里开始。

def include_object(object, name, type_, reflected, compare_to):
    """
    Exclude views from Alembic's consideration.
    """

    return not object.info.get('is_view', False)

...

context.configure(url=url,include_object = include_object)

【问题讨论】:

    标签: python flask-sqlalchemy alembic flask-migrate


    【解决方案1】:

    我认为(尽管尚未测试)您可以使用 __table_args__ 属性将您的表标记为视图:

    class ViewSampleView(db.Model):
        __tablename__ = 'vw_report_high_level_count'
        __table_args__ = {'info': dict(is_view=True)}
    
        id = db.Column(db.String(), primary_key=True)
        rowcount = db.Column(db.Integer(), nullable=False)
    

    【讨论】:

    • 工作就像一个魅力!还要注意自己和其他读者,context.configure 设置在 env.py 中的两个位置:run_migrations_offline() 和 run_migrations_online()
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多