gpt4 book ai didi

flask - 使用带有 flask 脚本和应用程序工厂的 flask 迁移

转载 作者:行者123 更新时间:2023-12-03 15:35:23 30 4
gpt4 key购买 nike

我正在构建 flask 应用程序并决定这次尝试应用程序工厂方法,但是遇到了 flask 迁移的麻烦并且无法找出简单的解决方案。

请注意,我想将配置位置作为选项传递给脚本

管理.py:

manager = Manager(create_app)
manager.add_option("-c", "--config", dest="config_module", required=False)

然后我需要创建迁移实例并向管理器添加命令:
with manager.app.app_context():
migrate = Migrate(current_app, db)
manager.add_command('db', MigrateCommand)

但尚未创建应用实例,因此失败

我知道我可以在环境变量中传递配置并在创建管理器实例之前创建应用程序,但是如何使用管理器选项呢?

最佳答案

当您使用 --config选项您必须使用您所知道的应用程序工厂函数,因为此函数将配置作为参数,并允许您创建具有正确配置的应用程序。

由于您有一个应用程序工厂,因此您必须对所有扩展使用延迟初始化。您在不传递任何参数的情况下实例化您的扩展,然后在创建应用程序后在您的应用程序工厂函数中调用 init_app在你所有的扩展上,传递应用程序和数据库,因为你已经有了它们。
MigrateCommand与此完全分开,您可以将其添加到 Manager没有创建应用程序和数据库实例。

例子:

管理.py:

from app import create_app
from flask_migrate import MigrateCommand, Manager

manager = Manager(create_app)
manager.add_option("-c", "--config", dest="config_module", required=False)
manager.add_command('db', MigrateCommand)

app.py (或者你的应用工厂模块被调用)
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

db = SQLAlchemy()
migrate = Migrate()

def create_app(config):
app = Flask(__name__)
# apply configuration
# ...

# initialize extensions
db.init_app(app)
migrate.init_app(app, db)

return app

关于flask - 使用带有 flask 脚本和应用程序工厂的 flask 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872867/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com