flask-SQLAlchemy解决报错 Working outside of application context.

news/2024/9/28 20:14:52

尝试想要写自己的自动化测试框架,使用的是flask,想要使用SQLAlchemy实现数据库的模型映射,但是按照官方文档创建好module后执行时,会报错Working outside of application context.
经过一番查找,存在flask的上下文问题,以下是解决过程

官网案例:http://www.pythondoc.com/flask-sqlalchemy/quickstart.html#quickstart

# -*- coding = utf-8 -*-
# @File: main_f.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)# 初始化数据库ORM连接
# 配置数据库链接地址
app.config["SQLALCHEMY_DATABASE_URI"] = run_config['database']['auto_test_db']['connect_uri']
# 若要查看映射的sql语句,需要如下配置,此功能对调试有用,正式环境建议设置为False
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
# -*- codeing = utf-8 -*-
# @File :  Users.py
from main import dbclass Users(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(80), unique=True)email = db.Column(db.String(120), unique=True)def __init__(self, username, email):self.username = usernameself.email = emaildef __repr__(self):return '<User %r>' % self.usernameif __name__ == '__main__':# 想要从定义好的模型中查询全量数据Users.query.all()
# -*- codeing = utf-8 -*-
# @Time :2024/6/19 18:32
# @Author :Ajie
# @Version :1.0
# @Descriptioon :
# @File :  db_create.py
from DbORM.Users import Users
from main import db, app# 想要创建当前已经定义好的模型
db.create_all()

上述db_create.pyUsers.py执行时都会报错
image

根据阅读和参考下面两篇文章得到解决

  1. https://blog.csdn.net/weixin_44285715/article/details/116839268
  2. https://cloud.tencent.com/developer/ask/sof/107343701

解决办法一:
根据代码中使用db的地点,使用with app.app_context()的方式携带flask上下文进行执行

# -*- codeing = utf-8 -*-
# @File :  db_create.py
from DbORM.Users import Users
from main import db, appwith app.app_context():db.create_all()admin = Users('admin', 'admin@example.com')guest = Users('guest', 'guest@example.com')db.session.add(admin)db.session.add(guest)db.session.commit()

解决办法二:
直接在flask的启动文件中,人为添加flask上下文信息

# -*- coding = utf-8 -*-
# @File: main_f.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)# 初始化数据库ORM连接
# 配置数据库链接地址
app.config["SQLALCHEMY_DATABASE_URI"] = run_config['database']['auto_test_db']['connect_uri']
# 若要查看映射的sql语句,需要如下配置,此功能对调试有用,正式环境建议设置为False
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)# 人为入栈,解决如创建数据库或数据表,或查询数据表时的上下文异常
app.app_context().push()

添加后即可在其他任意文件直接使用db

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/47186.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

再谈量化策略失效的问题

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 如何判断量化策略是否失效 我们在交易量化策略的时候,经常会遇到量化策略出现持续性的回撤。此时,必须考虑一种情况,即正在交易的策略可能失效了。于是,我们的首要工作是,判断这…

Ansible笔记

1、Ansible基本介绍 Ansible是一个自动化的管理IT资源的工具。 1)Ansible基本介绍Ansible功能 Ansbile优点 Ansible缺点系统环境配置 无客户的 效率低、易挂起安装仁济 推送式持续集成 丰富的module热回滚 基于YAML的Playbook2)Ansible与其他软件的对比对比项目 Puppet Chef …

使用宝塔面板反向代理openai

创建站点 配置反向代理 openai的特殊配置:proxy_set_header X-Error-Message $upstream_http_x_error_message; proxy_buffering off; proxy_ssl_server_name on; proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 反向代理完整配置:#PROXY-START/location ^~ / {proxy_pass ht…

模拟集成电路设计系列博客——7.2.3 每阶段k-bit流水线ADC

7.2.3 每阶段k-bit流水线ADC 通过增加中间级增益和每级的比较器可以在每级解析多于1比特。信号流图类似之前介绍的每次迭代2比特的逐次逼近型ADC。一个通用的k比特级如下图所示:k比特副ADC的非线性可以通过增加额外的比较器通过数字方式来校正,类似于每级1.5比特架构[Lewis, …

安装metasploitable2

一、介绍 Metasploitable2 虚拟系统是一个特别制作的ubuntu操作系统 二、安装virtualbox 三、下载 metasploitable2,网址 https://sourceforge.net/projects/metasploitable/files/Metasploitable2/ ,解压如下 四、打开virtualbox 1 新建虚拟机2 选择虚拟硬盘3 选择注册4 选…

Python 遍历文件每一行判断是否只有一个换行符详解

前言 在文件处理过程中,判断文件每一行是否只有一个换行符是一个常见需求。作为测试工程师,我们经常需要对文件的格式进行验证,确保数据的完整性和规范性。本文将详细介绍如何使用 Python 遍历文件的每一行,并判断每一行是否只有一个换行符。 需求分析 我们需要编写一个 Py…

Python 抽奖程序限定次数详解

前言 在开发抽奖程序时,限定用户的抽奖次数是一个常见需求。Python 提供了灵活的工具和数据结构,可以轻松实现这个功能。本文将详细介绍如何编写一个限定抽奖次数的 Python 程序,包括设置抽奖次数限制、记录用户抽奖次数以及实现抽奖逻辑。 需求分析 我们需要一个抽奖程序,…

Typora行内公式识别不了

Typora行内公式识别不了,主要是因为行内公式属于LaTeX扩展语法,并非Markdown的通用标准需要在Typora的“文件”-“偏好设置”-“Markdown扩展语法”中,勾选“内联公式”一项,Typora才会予以解析。成功效果