Flask使用不同的postgres模式进行迁移(__table_args__ = {'schema':'test_schema']})

时间:2016-11-13 19:00:41

标签: flask flask-sqlalchemy alembic flask-migrate

我正在尝试使用flask,sqlalchemy和flask_migrate ......

但每次运行manage.py migrate时,alembic总是将我的模型检测为新表。

我认为我将 table_args 放在我的模型中以将表存储在不同的postgres模式中:

class Entry(db.Model):
    __table_args__ = {'schema': app.config['BASE_SCH']}
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    slug = db.Column(db.String(100), unique=True)
    body = db.Column(db.Text)
    status = db.Column(db.SmallInteger, default=STATUS_PUBLIC)
    created_timestamp = db.Column(db.DateTime, default=datetime.datetime.now)
    modified_timestamp = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now)

如果要删除模型的 table_args 行,则可以正常运行。将我的表存储在puclic postgres架构中。

那么,如何在烧瓶中使用不同的postgres表模式?

谢谢!

1 个答案:

答案 0 :(得分:1)

最后想出了这一点:在配置中有一个include_schemas选项,您必须设置为True以强制Alembic在生成迁移之前扫描所有模式。

(稍微)更多细节:http://alembic.zzzcomputing.com/en/latest/api/runtime.html#alembic.runtime.environment.EnvironmentContext.configure.params.include_schemas

我并不完全清楚为什么Alembic / Flask-Migrate在非默认架构中生成表的迁移首先没有设置此选项...或者更确切地说,它是事实会为非默认架构创建迁移,但不会在数据库中发现这些表是一种令人惊讶的行为。