我有一个非常简单和愚蠢的问题,但我不知道自己缺少什么。基本上,按照我目前编写我的管理应用程序的方式,似乎flask迁移总是创建绝对迁移,而不仅仅是diff。例如,考虑此用例。如果删除迁移并旋转一个全新的数据库,然后执行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']})
答案 0 :(得分: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)