python - 还有一个关于 Flask 的应用程序上下文和 SQLAlchemy 的问题
问题描述
我不知道烧瓶,我已经使用它几年了。我有一个运行良好的应用程序:基于浏览器的 UI 显示分析管道的结果,方便地存储在数据库中。但是,随着越来越多的内容(部分)添加到应用程序中,需要进行全面重构。
基于几个可用的指南和教程,该应用程序现在广泛使用了烧瓶的蓝图和分组逻辑。像这样的东西:
/analysis_pipeline
|-- /controller
│ |-- __init__.py
│ |-- api.py
│ |-- /home
│ │ |-- /templates
│ │ |-- /static
│ │ |-- home.py
│ ├── /results
│ │ |--/templates
│ │ |--/static
│ │ |--results.py
...
|-- /pipeline
| |-- __init__.py
| |-- /Condition_A
| | |-- __init__.py
| | |-- condition_a.py
| | |-- utils.py
| |-- /Condition_B
| | |-- __init__.py
| | |-- condition_b.py
| | |-- utils.py
| |-- pipeline_manager.py
...
|-- factory.py
|-- application_entry_point.py
应用程序正确启动,但在执行分析管道期间出现问题。
pipeline_manager.py
_get_current_object()
通过函数获取应用对象。然后准备执行并触发它。
应用程序必须对数据库运行一些 R/W 操作,我执行从内部推送 app_context 操作condition_a.py
。为了做到这一点,我从烧瓶中导入current_app
代理并使用它,正如在with
声明中解释的那样。
from flask import current_app as app
...
with app.app_context():
a_query = text("update a_table set name = 'NAME' where value = 123;")
db.engine.execute(a_query)
但是,不会推送上下文,也无法进行 R/W 操作,除非整个管道在with
语句下运行。这可能很好,即使我觉得这不是正确的使用方式。
with current_app.app_context():
pipeline.run()
此外,这样我有时会遇到mysql的Lock wait timeout exception,这是以前从未发生过的。
我怀疑我仍然滥用(或误解)应用程序代理,并且无法弄清楚错误在哪里。任何人都可以帮助我(或指出一些可以帮助我的资源)找到正确的使用方法吗?
解决方案
推荐阅读
- json - 在 ASP.NET 核心 json 中的所有响应中添加一个字符串
- python - Google Dataflow:未定义全局名称 - apache beam
- python - 无法反序列化解码 JWT python 的关键数据
- javascript - 如果包含/不包含单选按钮值文本,则显示/隐藏 div
- java - 查找字符串中重复次数最多的单词
- java - CompletableFuture uniApply 方法
- python - 如何总结输入的数字范围?
- php - cron 输出文件未记录 Symfony 控制台异常
- java - 无限循环检测最新文件
- c - 使用物理地址作为 sk_buff 数据片段