【问题标题】:Flask-Migrate creates the same duplicate migration when used with postgres schemasFlask-Migrate 与 postgres 模式一起使用时会创建相同的重复迁移
【发布时间】:2020-01-04 21:40:01
【问题描述】:

我有一个非常简单和愚蠢的问题,但我不知道我错过了什么。基本上,按照我目前编写管理应用程序的方式,flask migrate 似乎总是创建一个绝对迁移,而不仅仅是一个从以前的架构迁移到当前架构的变更集。

例如,如果我删除我的迁移并旋转一个全新的数据库,然后我执行manage db migrate 然后manage db upgrade 所有工作。如果我随后对 db.Model 表进行更改,然后执行 manage db migrate,我不会收到错误消息。

但是,新的迁移脚本指向前一个,但不仅仅是将数据库从前一个模式状态获取到新模式所需的差异,而是从空模式开始的完整(绝对)迁移 - 如,它将尝试再次从头开始创建表(使用更改),而不仅仅是将更改应用于已创建的模式。也就是说,即使迁移与之前的迁移相关联,它也没有考虑到之前的迁移应用了什么。这意味着它们不能被链接,因为例如第二次迁移将尝试再次创建表,因此 manage db upgrade 在第二次调用时失败。

我的manage 应用如下所示:

from flask_migrate import Migrate, MigrateCommand

from src.common.db import db
from src.common.flaskery import global_flask_app, global_flask_manager

app = global_flask_app(__name__)
migrate = Migrate(app, db)
manager = global_flask_manager(__name__)
manager.add_command('db', MigrateCommand)

from src.db.models import *

def main():
    manager.run()

if __name__ == '__main__':
    main()

类似:Flask Migrate using different postgres schemas ( __table_args__ = {'schema': 'test_schema']})

【问题讨论】:

  • 您使用的是什么数据库?有非默认模式的 Postgres 吗?
  • 是的。我在def upgrade() 中添加op.execute("create schema data"),然后在def downgrade() 部分中添加op.execute("drop schema data")

标签: flask sqlalchemy flask-sqlalchemy alembic flask-migrate


【解决方案1】:

所以在您的migrations/env.py 中,您需要将include_schemas=True 添加到配置中,如下所示:

context.configure(connection=connection,
                  target_metadata=target_metadata,
                  process_revision_directives=process_revision_directives,
                  include_schemas=True,
                  **current_app.extensions['migrate'].configure_args)

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 2017-03-27
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多