Flask中无法在其他函数中查询Sqlachemy的解决办法
报错信息部分截取:
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的解决办法的更多相关文章
- ajax回调中的this.href不执行跳转的解决办法
1. 问题背景 如下所示代码: $.post("/ems/register",indata, function(data){ if(data != null && ...
- .NET在IE9中页面间URL传递中文变成乱码的解决办法
在.Net的项目中,鼠标点击查询按钮,转到查询页面,但URL中包含中文时,传到服务器端后,中文变成了乱码(只有IE9出现该问题). 尝试使用Server.UrlEncode()进行编码, ...
- es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式
es6 Object.assign 目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法
Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...
- electron-vue中使用iview 报错this. is readonly的解决办法
title: electron-vue中使用iview 报错this. is readonly的解决办法 toc: false date: 2019-02-12 19:33:28 categories ...
- Eclipse中js文件修改后浏览器不能及时更新的解决办法
项目中js文件修改后浏览器不能及时更新的解决办法 转载:http://www.codeweblog.com/%E9%A1%B9%E7%9B%AE%E4%B8%ADjs%E6%96%87%E4%BB%B ...
- (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)。
详细教程: (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)._IT打工酱的博客-CSDN博客
- linux中应用程序main函数中没有开辟进程的,它应该在那个进程中运行呢?
1.main函数是一个进程还是一个线程? 不知道你是用c创建的,还是用java创建的. 因为它们都是以main()做为入口开始运行的. 是一个线程,同时还是一个进程. 在现在的操作系统中,都是多线程的 ...
随机推荐
- html5基础!!
A:HTML5 不基于 SGML,所以不需要引用 DTD: B: HTML 4.01 基于 SGML,而HTML5不基于SGML: DTD可定义合法的XML文档构建模块,它使用一系列合法的元素来定义文 ...
- 【软工神话】第五篇(Beta收官)
前言:这应该是最后一章了,故事虽然到这就结束了,但现实里还要继续下去,希望在很久的以后来回顾时,能因自己学生时代有这样的经历而欣慰. 说明:故事中的人物均是化名,故事情节经过些许加工,故事情节并没有针 ...
- ReactNative调研结果
React Native相关调研总结 一.概要 React Native - 使用React开发世界一流的原生应用: 使用JavaScript和React(对JS有一定扩展)作为开发语言: React ...
- 自定义View类
一.如何创建自定义的View类 ①.创建一个继承android.view.View类的Java类,并且重写构造方法(至少需要重写一个构造方法) ②.根据需要重写其他方法 ③.在项目的活动中,创建并实例 ...
- Android 官方Demo ActionBarCompat-Styled
ActionBarCompat-Styled Demo下载地址:https://github.com/googlesamples/android-ActionBarCompat-Styled/#rea ...
- 图文并茂 RAID 技术全解 – RAID0、RAID1、RAID5、RAID10
RAID 技术相信大家都有接触过,尤其是服务器运维人员,RAID 概念很多,有时候会概念混淆.这篇文章为网络转载,写得相当不错,它对 RAID 技术的概念特征.基本原理.关键技术.各种等级和发展现状进 ...
- Python介绍及环境搭建
摘自http://www.cnblogs.com/sanzangTst/p/7278337.html Python零基础学习系列之二--Python介绍及环境搭建 1-1.Python简介: Py ...
- c strlen和sizeof详解
用双引号定义并且声明的时候明确指定数组大小的话,sizeof就会返回指定的大小,不会自动加1: char str2[10] = "hello c"; printf("st ...
- 便捷的方式在手机上查看Unity3D的Console Log(调试信息 日志)
Logs Viewer 功能描述 Using this tool you can easily check your editor console logs inside the game itsel ...
- web测试笔记
WEB兼容性测试 一.客户端兼容性 1.浏览器的兼容性测试 a.内核角度 Tridnt内核:代表作IE.腾讯.遨游.世界之窗等 Gecko内核:代表作Firefox webkit内核:代表作Safar ...