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传入方式是因为避免循环导包, 思路是这样,实现方式自己把握好了.

然后问题就可以解决了.

原文地址:https://www.cnblogs.com/haiton/p/11101476.html