問題是什么?
在flask中,使用多線程操作數據庫,報錯:RuntimeError: No application found . Either work inside a view function or push an application context
報錯原因:線程是獨立的,相對於flask進程是獨立的,它不知道flask初始化時候,app對象,db對象是誰,也就拿不到連接數據庫需要的config,就報錯了。
所以需要上下文。
一,什么是上下文?
現在讓你讀一本小說《平凡的世界》,前十章不讓你讀,讓你直接讀十一章,然后問你:少安和潤葉什么關系?
你是不是十臉懵逼?少安是誰,潤葉又他媽是誰? 這個時候你說不認識,解釋不了,然后拋出一個異常:RuntimeError: No application found . Either work inside a view function or push an application context
這就是上下文。
二,怎么解決上下文問題
python中用with語句來管理上下文 。具體flask中,解決上下文,就是在線程中,開始執行代碼的最上方,加入 with app.app_context():
比如:
def thread(): from flask import app with app.app_context(): do something
這樣就相當於把你調用多線程之前的app對象,db對象告訴了這個線程。這樣就不會報錯了!