首页 > 数据库 >flask-SQLAlchemy解决报错 Working outside of application context.

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

时间:2024-06-19 19:32:44浏览次数:27  
标签:__ SQLAlchemy Users Working flask app db 报错 import

尝试想要写自己的自动化测试框架,使用的是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 SQLAlchemy

app = 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 db

class 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 = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username


if __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, app

with app.app_context():
    db.create_all()
    admin = Users('admin', '[email protected]')
    guest = Users('guest', '[email protected]')
    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 SQLAlchemy

app = 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

标签:__,SQLAlchemy,Users,Working,flask,app,db,报错,import
From: https://www.cnblogs.com/T-Ajie/p/18257202

相关文章

  • 记录项目启动 RPC链接报错问题
    场景:`学习中遇到一个问题网关服务启动报9848端口问题连接超时网上找了太多的资料了,但是都不太符合我当前的问题,要么就是没解决分析:实在找不到能参考的资料了想着自己打断点看源码报错就是在这里打印出来的可以看到Servercheckfail,pleasecheckserver{},......
  • 生产者报错Producer send queue is full
    生产消息时报如下错误导致生产失败:org.apache.pulsar.client.api.PulsarClientException$ProducerQueueIsFullError:Producersendqueueisfullatorg.apache.pulsar.client.impl.ProducerImpl.canEnqueueRequest(ProducerImpl.java:715) 报错原因:1.生......
  • Visual Studio + Qt项目 数组超界不会报错。 堆栈 Cookie 检测代码检测到基于堆栈
    使用vs+Qt项目时,数组超界不会崩溃和报错的问题。 开启以下2个即可。  注意:1.启用了地址擦除系统会造成QT的异常崩溃,原因未知。2.有时会报cookie的错误,数组超界了,在退出函数时才会报错。   ......
  • centos7离线升级gcc , 报错:/lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found
     因为需要依赖gcc高版本但是目前服务器版本是4.8.5的然后服务器又是内网所以只能离线升级gcc 分别下载https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gzhttps://ftp.gnu.org/pub/gnu/gmp/gmp-6.1.0.tar.bz2https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gzhttp:......
  • GB28181安防视频系统EasyCVR报错version`GLIBCXX_3.4.19'not found如何处理?
    多协议接入/GB28181/GAT1400协议/安防综合管理系统EasyCVR视频汇聚平台能在复杂的网络环境中,将前端设备统一集中接入与汇聚管理。智慧安防/视频存储/视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘......
  • 运行若依时报错
    Causedby:java.lang.IllegalStateException:Logbackconfigurationerrordetected:ERRORinch.qos.logback.core.rolling.RollingFileAppender[file_info]-Failedtocreateparentdirectoriesfor[/home/ruoyi/logs/sys-info.log]ERRORinch.qos.logback.core.ro......
  • Flink1.17.0-报错: java.lang.NoSuchMethodError: org.apache.kafka.clients.admin.De
    背景:启动Flink的sql-client.sh,创建Kafka的source端表,然后查询Kafka的数据时报错。报错信息:2024-06-1816:10:12org.apache.flink.util.FlinkException:GlobalfailuretriggeredbyOperatorCoordinatorfor'Source:kafka_rmc_cust_analog_u[1]'(operatorbc764cd8ddf7a0c......
  • eclipse maven打包报错: 致命错误: 在类路径或引导类路径中找不到程序包 java.lang的
    还是上来帖张图:1、系统之前是运行在mac上的,打包一切正常,但是现在在win11的eclipse打包就报错了。2、致命错误:在类路径或引导类路径中找不到程序包java.lang,上面的问题应该是找不到java中的jar中的class导致。解决:1)java,运行直接提示找不到命令。发现以管理员运行是......
  • tomcat9 启动时报错:java.lang.IllegalStateException: Malformed \uxxxx encoding的
    1、启动tomcat9springboot项目的时候,直接报下面的错误。2024-06-1809:38:20ApacheCommonsDaemonprocrunstdoutinitialized.09:38:35.597[main]ERRORorg.springframework.boot.SpringApplication-Applicationrunfailedjava.lang.IllegalStateException:Malf......
  • easyexcel和poi版本冲突报错深入解析v2
    easyexcel报错解决问题项目由poi改用easyexcel,报错如下:java.lang.NoSuchMethodError:‘org.apache.poi.ss.usermodel.CellTypeorg.apache.poi.ss.usermodel.Cell.getCellType()’原因easyexcel中的poi和项目原本的poi版本冲突问题。由于之前做过easyexcel项目,就把......