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


基础教程推荐
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 包装空间模型 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 求两个直方图的卷积 2022-01-01