我有一个非常简单和愚蠢的问题,但我不知道我错过了什么。基本上,按照我目前编写管理应用程序的方式,似乎flask migrate总是创建一个绝对迁移,而不仅仅是一个从以前的模式迁移到当前模式的更改集。
例如,如果我删除我的迁移并旋转一个全新的DB,然后我执行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迁移使用不同的postgres模式( __table_args__ = {'schema':'test_schema'})](https://stackoverflow.com/questions/40577640/flask-migrate-using-different-postgres-schemas-table-args-schema-te)
发布于 2019-09-02 08:41:39
因此,在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)https://stackoverflow.com/questions/57746979
复制相似问题