And*_*y G 4 python flask-sqlalchemy alembic flask-migrate
我使用 Flask-SQLAlchemy 来定义我的模型,然后使用 Flask-Migrate 自动生成迁移脚本以部署到 PostgreSQL 数据库。我在我的应用程序中使用的数据库上定义了许多 SQL 视图,如下所示。
然而,Flask-Migrate 现在为视图生成一个迁移文件,因为它认为它是一个表。如何正确地让 Flask-Migrate / Alembic 在自动生成过程中忽略视图?
SQL 视图名称:vw_SampleView有两列:id和rowcount。
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)
Run Code Online (Sandbox Code Playgroud)
这意味着我现在可以做这样的查询:
ViewSampleView.query.all()
Run Code Online (Sandbox Code Playgroud)
我尝试按照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)
Run Code Online (Sandbox Code Playgroud)
我认为(虽然尚未测试)您可以将您的 Table 标记为具有以下__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)
Run Code Online (Sandbox Code Playgroud)