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


- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何将一个类的函数分成多个文件? 2022-01-01
- 沿轴计算直方图 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01