报错信息部分截取:

 File "D:\python 3.5\lib\site-packages\flask_sqlalchemy\__init__.py", line 912, in get_app
'No application found. Either work inside a view function or push'
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

错误根源:

class GroupForm(FlaskForm):
'''分组表单'''
menu_id = SelectField(label = "所属菜单",validators = [DataRequired("请选择菜单!")],coerce = int,
choices = [(v.id,v.name) for v in Menu.query.all()],render_kw = {"class":"form-control"})
#在form表单中执行了数据库查询操作,就会出现报错,后面发现只有在视图函数中执行数据库查询操作才不会报错(出了视图函数外的其他地方都不好使)

排错:

相信很多人都是这样写的init 文件的吧:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from config import Config
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
Config.init_app(app)
db.init_app (app)
from .admin import admin as admin_blueprint
app.register_blueprint(admin_blueprint,url_prefix = '/admin')
return app

然后再丛manager启动文件导入create_app

from flask_script import Manager
from app import create_app,db
app = create_app()
from flask_migrate import MigrateCommand,Migrate
manage = Manager(app)
migrate = Migrate(app,db)
manage.add_command('db',MigrateCommand)
if __name__ == '__main__':
app.run()

这样写了之后,那么你就只能在视图函数中执行数据库操作了!!!

解决办法:

方式一 直接实例化app 不要写create_app函数了,在启动文件中直接导入app对象:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
from config import Config
app.config.from_object(Config)
Config.init_app(app)
db = SQLAlchemy(app)
from .models import Auth,Role,User,Group,Menu from .admin import admin as admin_blueprint
app.register_blueprint(admin_blueprint,url_prefix = '/admin')

方式二 如果你要你的表单中使用数据库查询,那么可以换种方式已达到同样的效果

class GroupForm(FlaskForm):
'''分组表单'''
menu_id = SelectField(label = "所属菜单",validators = [DataRequired("请选择菜单!")],coerce = int,
choices = "",render_kw = {"class":"form-control"}) #然后在你的视图函数中实例化这个Form 类的时候给它赋值
form = MenuForm()
if request.method == "GET":
form.menu_id.choices = [(v.id,v.name) for v in Menu.query.all ()] #或者你也可以在你的Form类中写一个init方法
class GroupForm(FlaskForm):
'''分组表单'''
menu_id = SelectField(label = "所属菜单",validators = [DataRequired("请选择菜单!")],coerce = int,
choices = "",render_kw = {"class":"form-control"}) def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.menu_id.choices = [(v.id,v.name) for v in Menu.query.all()]

问题解决

转自:https://blog.csdn.net/zhongqiushen/article/details/79162792

Flask中无法在其他函数中查询Sqlachemy的解决办法的更多相关文章

  1. ajax回调中的this.href不执行跳转的解决办法

    1. 问题背景 如下所示代码: $.post("/ems/register",indata, function(data){ if(data != null && ...

  2. .NET在IE9中页面间URL传递中文变成乱码的解决办法

     在.Net的项目中,鼠标点击查询按钮,转到查询页面,但URL中包含中文时,传到服务器端后,中文变成了乱码(只有IE9出现该问题).       尝试使用Server.UrlEncode()进行编码, ...

  3. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  4. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  5. Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法

    Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...

  6. electron-vue中使用iview 报错this. is readonly的解决办法

    title: electron-vue中使用iview 报错this. is readonly的解决办法 toc: false date: 2019-02-12 19:33:28 categories ...

  7. Eclipse中js文件修改后浏览器不能及时更新的解决办法

    项目中js文件修改后浏览器不能及时更新的解决办法 转载:http://www.codeweblog.com/%E9%A1%B9%E7%9B%AE%E4%B8%ADjs%E6%96%87%E4%BB%B ...

  8. (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)。

    详细教程: (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)._IT打工酱的博客-CSDN博客

  9. linux中应用程序main函数中没有开辟进程的,它应该在那个进程中运行呢?

    1.main函数是一个进程还是一个线程? 不知道你是用c创建的,还是用java创建的. 因为它们都是以main()做为入口开始运行的. 是一个线程,同时还是一个进程. 在现在的操作系统中,都是多线程的 ...

随机推荐

  1. spring boot之hello

    自己使用springboot也已经写过一段时间的代码,但是对springboot真正运行的流程还是有点模糊,今天写出自己对springboot的认识,如有不对,还请各位大佬不吝赐教,话不多说,直接上代 ...

  2. 【 js 工具 】如何在Github Pages搭建自己写的页面?

    最近发现 github 改版了,已没有像原来的 Launch automatic page generator 这样的按钮等,所以我对我的文章也进行了修正,对于新版来说,步骤更加简单了.欢迎享用. - ...

  3. 1; XHTML 基本知识

    万维网是我们这个时代最重要的信息传播手段.几乎任何人都可以创建自己的网站,然后把它发布在因特网上.一些网页属于企业,提供销售服务:另一些网页属于个人,用来分享信息.你可以自己决定网页的内容和风格.所有 ...

  4. 使用eclipse初步学习vue.js基础==》v-for的使用 ②

    一.步骤演示 1. 新建一个jsp文件 2. 把vue.js放到Web的js目录下 3. 在jsp中引入vue.js <script src="${pageContext.reques ...

  5. Markdown简单上手

    标题 # +内容 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 字体 1. 加粗(Ctrl+B) **加粗** 2. 斜体(Ctrl+I) *斜体* 3. 斜体加粗(Ctrl+B+I) ...

  6. zTree 节点文字过多处理方法

    zTree setting.view.addDiyDom 方法可以实现自定义控件,指定节点显示内容.因此需要自己实现addDiyDom方法. 如果树节点不显示checkbox ,处理方法为: func ...

  7. Implemented the “Importance Sampling of Reflections from Hair Fibers”

      Just the indirect specular pass by importance sampling. With all layers. Manually traced by 3D Ham ...

  8. html-edm(邮件营销)编写规则

    最近写了一个edm邮件 以前没有接触过  使用的是很老的html页面编写规则  只能用table标签  在此记录一下edm编写的一些规则 个人参考的是这两个网址,转载一下 http://www.zco ...

  9. Visual Studio Team Services Demo Generator简介

    Visual Studio Team Services Demo Generator简介 Visual Studio Team Services Demo Generator能够帮助我们在Visual ...

  10. SQL Server等待事件—RESOURCE_SEMAPHORE_QUERY_COMPILE

    等待事件介绍 关于等待事件RESOURCE_SEMAPHORE_QUERY_COMPILE,官方的介绍如下: Occurs when the number of concurrent query co ...