flask報了這個錯,字面意思是說沒有應用上下文,字面給的解決意見是要么放置在一個視圖內,要么提供一個應用(flask)上下文.
查看文檔發現文檔給了個解決方案:
一個是通過app.app_context().push()來推入一個上下文,第二個是通過with上下文來確定作用在APP上下文區域內的代碼.
個人覺得還是通過裝飾器的方式來的方便和美觀,當然第二種方式也相當優美.
下面是我的解決方法:
1 def sqlalchemy_context(app): 2 def add_context(func): 3 @wraps(func) 4 def do_job(*args, **kwargs): 5 app.app_context().push() 6 result = func(*args,**kwargs) 7 return result 8 return do_job 9 return add_context
然后我使用數據庫的地方:
@sqlalchemy_context(APP) def init_primary_key(): Model.query.filter_by() ...
* 我APP傳入方式是因為避免循環導包, 思路是這樣,實現方式自己把握好了.
然后問題就可以解決了.