Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flask 物化视图的alembic生成_Flask_Sqlalchemy_Flask Sqlalchemy_Alembic - Fatal编程技术网

Flask 物化视图的alembic生成

Flask 物化视图的alembic生成,flask,sqlalchemy,flask-sqlalchemy,alembic,Flask,Sqlalchemy,Flask Sqlalchemy,Alembic,TL;DR:如何让alembic理解并为在sqlalchemy中创建的物化视图生成SQL 我在用炼金术,也在用alembic和postgres。为了获得一个使用sqlalchemy的物化视图,我遵循了一个主题。我大量使用它,只是有一些小的分歧(本文也使用flask sqlalchemy,但是完整的代码示例直接使用sqlalchemy的声明性基础) 类似地,在具体化视图上生成唯一索引时,我执行相同的直接SQL执行 不幸的是,我的方法很容易出错,并且会产生看似不必要的代码重复 有没有办法让alemb

TL;DR:如何让alembic理解并为在sqlalchemy中创建的物化视图生成SQL

我在用炼金术,也在用alembic和postgres。为了获得一个使用sqlalchemy的物化视图,我遵循了一个主题。我大量使用它,只是有一些小的分歧(本文也使用flask sqlalchemy,但是完整的代码示例直接使用sqlalchemy的声明性基础)

类似地,在具体化视图上生成唯一索引时,我执行相同的直接SQL执行

不幸的是,我的方法很容易出错,并且会产生看似不必要的代码重复

有没有办法让alembic了解我的
活动视图
,以便在它发生变化时,alembic知道如何更新视图


多谢

出于好奇,你有没有想过这个?从今天开始走这条路。。。
class ActivityView(db.Model):
    __table__ = create_materialized_view(
        'activity_view',
        db.select([
            Activity.id.label('id'),
            Activity.name.label('name'),
            Activity.start_date.label('start_date'),
        ]).where(
            db.and_(
                Activity.start_date != None,
                Activity.start_date <=
                    datetime_to_str(datetime.now(tz=pytz.UTC) + timedelta(hours=48))
            )
        )
    )

    @classmethod
    def refresh(cls, concurrently=True):
        refresh_materialized_view(cls.__table__.fullname, concurrently)

db.Index('activity_view_index',
         ActivityView.__table__.c.id, ActivityView.__table__.c.start_date,
         unique=True)
op.execute(activities_view_sql)