我有一个非常简单和愚蠢的问题,但我不知道我错过了什么。基本上,按照我目前编写管理应用程序的方式,flask migrate 似乎总是创建绝对迁移,而不仅仅是从以前的架构迁移到当前架构的更改集。
例如,如果我删除迁移并旋转一个全新的数据库,然后执行管理数据库迁移
,然后执行管理数据库升级
,一切正常。如果我随后对 db.Model
表进行更改,然后执行manage db migrate
,我不会收到错误。
但是,新的迁移脚本指向前一个脚本,但不仅仅是将数据库从以前的架构状态转移到新的架构状态所需的差异,而是从空架构开始的完整(绝对)迁移 - 如,它会尝试再次从头开始创建表(进行更改),而不仅仅是将更改应用于已创建的架构。也就是说,即使迁移与前一个迁移相关联,它也没有考虑到前一个迁移所应用的内容。这意味着它们无法链接,因为例如第二次迁移将尝试再次创建表,因此第二次调用时管理数据库升级
失败。
我的管理
应用程序如下所示:
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']})
最佳答案
因此,在您的 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)
关于Flask-Migrate 与 postgres 模式一起使用时会创建相同的重复迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57746979/