今天在使用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()
这样就可以创建数据库了。