No application found. Either work inside a view function or push an application context.
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传入方式是因为避免循环导包, 思路是这样,实现方式自己把握好了.
然后问题就可以解决了.