网站LOGO
博客 | 棋の小站
页面加载中
12月6日
达尔达尼亚瀑布,博洛尼亚,意大利 ...
网站LOGO 博客 | 棋の小站
记录学习,心得,状态,生活。
菜单
  • 博客 | 棋の小站
    记录学习,心得,状态,生活。
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    Flask-SQLAlchemy中遇请求上下文的问题
    点击复制本页地址
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    按住ctrl可打开默认菜单

    Flask-SQLAlchemy中遇请求上下文的问题

    · 原创 ·
    解决困难 · FlaskPython
    共 2012 字 · 约 1 分钟 · 158

    今天在使用Flask-SQLAlchemy模块操作数据库时遇到了异常,下面是异常的描述。

    RuntimeError: Working outside of application context.
    
    This typically means that you attempted to use functionality that needed the current application.
    To solve this, set up an application context with app.app_context().
    See the documentation for more information.

    下面是完整的代码。

    python 代码:
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    # 配置相关属性
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:254456@localhost/db_flask'
    
    # 实例化Alchemy类
    db = SQLAlchemy(app)
    
    # 创建数据库模型类
    class User(db.Model):
        id = db.Column(db.Integer, autoincrement=True, primary_key=True)
        username = db.Column(db.String(80), unique=True, nullable=False)
        email = db.Column(db.String(120), unique=True, nullable=False)
    
        def __repr__(self):
            return '<User %r>' % self.username
    
    if __name__ == '__main__':
        db.create_all()  # 这里遇到了异常

    查询了ChatGpt后它给出问题在于:

    这个异常通常出现在 Flask 应用程序上下文之外的地方使用了某些 Flask 功能。这可能是因为你尝试在 Flask 应用程序上下文之外的地方调用了 Flask 扩展、路由函数或视图函数。

    为了解决这个问题,你需要在使用 Flask 功能之前创建一个应用程序上下文。可以使用 app.app_context() 方法创建应用程序上下文,然后在上下文中执行需要的操作。

    因此将代码做一下更改:

    python 代码:
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    # 配置相关属性
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:254456@localhost/db_flask'
    
    # 实例化Alchemy类
    db = SQLAlchemy(app)
    
    # 创建数据库模型类
    class User(db.Model):
        id = db.Column(db.Integer, autoincrement=True, primary_key=True)
        username = db.Column(db.String(80), unique=True, nullable=False)
        email = db.Column(db.String(120), unique=True, nullable=False)
    
        def __repr__(self):
            return '<User %r>' % self.username
    
    if __name__ == '__main__':
        with app.app_context():
            # 在应用程序上下文中执行需要的操作
            db.create_all()

    这样就可以创建数据库了。

    声明:本文由 (博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    发一条! 发一条!
    博客logo 博客 | 棋の小站 记录学习,心得,状态,生活。
    ICP 冀ICP备2023007665号 ICP 冀公网安备 13030202003453号

    🕛

    本站已运行 221 天 14 小时 11 分

    👁️

    今日访问量:154 昨日访问量:2564

    🌳

    建站:Typecho 主题:MyLife
    博客 | 棋の小站. © 2023 ~ 2023.
    网站logo

    博客 | 棋の小站 记录学习,心得,状态,生活。
     
     
     
     
    壁纸