【发布时间】:2022-11-11 10:01:49
【问题描述】:
我有一个需要在启动时运行代码的 Flask 应用程序。就我而言,它检测可用的云资源并将其写入数据库中的表中。
问题是,当我运行flask db upgrade 时,flask-migrate 会执行应用程序启动代码,包括尝试写入 db 表的代码。由于迁移本身是创建表的原因,因此该表还不存在,迁移失败。
这是代码,删除了不相关的部分:
def create_app():
app = Flask(__name__, static_url_path=None)
with app.app_context():
db = set_up_database_connection()
Migrate(app, db)
# This is what fails because the table doesn't exist yet
run_startup_tasks()
@app.get('/')
def health_check():
return 'OK'
app.logger.info("Application created.")
return app
我使用@app.before_first_request 注释做了一个临时解决方法。使用解决方法,启动代码在第一个请求通过之前运行。但是,这并不理想,因为这会导致对应用程序的第一次请求需要很长时间。
@app.before_first_request
def perform_startup_tasks():
run_startup_tasks()
如何在不破坏烧瓶迁移的情况下运行需要数据库的启动任务?
【问题讨论】:
标签: python flask flask-migrate