Flask app.teardown_appcontext not being called when DEBUG is false(debug为false时不调用flask app.teardown_appcontext)
问题描述
问题: 当debug为false时,不会调用flask app.teardown_appcontext。Flask的app.teardown_request工作正常。
背景: 首次发现此问题是因为出现错误(2013,‘查询期间丢失与MySQL服务器的连接’),该错误仅在DEBUG=FALSE时发生
进一步研究后,我意识到这是因为flask_sqlalChemy中的会话没有被正确删除。
def create_app(config_obj):
app = Flask(__name__)
env = Environments(app)
env.from_object(config_obj)
# init extensions
SetupLogs(app)
db.init_app(app)
api.init_app(app)
CORS(app)
# This gets called after each request
@app.teardown_request
def teardown_request(response_or_exc):
db.session.remove()
# This never gets called after requests only when DEBUG = False!
@app.teardown_appcontext
def teardown_appcontext(response_or_exc):
db.session.remove()
return app
app = create_app('config')
manager = Manager(app)
migrate = Migrate(app, db)
...
推荐答案
我终于找到问题了,实际上是将flask-script与flask-SqlAlChemical一起使用的副作用。
如果SQLAlChemy是使用init_app实例化的,则如果在作用域会话(在请求中进行)之外执行DB操作,则必须使用app.app_context().ush()。More Details但如果推送应用上下文,则必须手动关闭它,否则它永远不会被拆卸,因此永远不会触发teardown_appcontext。
Flask-Script runs commands inside a flask test context我认为这使应用上下文保持活动状态。
这篇关于debug为false时不调用flask app.teardown_appcontext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:debug为false时不调用flask app.teardown_appcontext
基础教程推荐
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01