Flask-SQLAlchemy项目重构:数据库初始化调用app报错求助
Flask重构后SQLAlchemy初始化报错求助
问题背景
本人是Flask框架新手,为后续集成Dash应用,参考线上方案将Flask应用重构为规范项目结构,将Flask实例命名为server。目前在models.py中初始化SQLAlchemy数据库对象(db = SQLAlchemy(server))时,持续抛出错误:
TypeError: cannot create weak reference to 'LocalProxy' object
已尝试的解决方案
- 方案1:将db初始化移至
__init__.py,但routes.py和models.py导入db时出现ImportError: cannot import name 'db' from 'flask' - 方案2:在
models.py中保留db并添加init_db方法,调用时触发RuntimeError: Working outside of application context.;调整调用位置后,仍出现最初的LocalProxy相关错误
当前项目结构
your_project/ ├── app/ │ ├── __init__.py │ ├── models.py │ └── routes.py └── run.py
核心文件代码
app/init.py
from flask import Flask server = Flask(__name__) server.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' server.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 方案1尝试时的代码: # from flask_sqlalchemy import SQLAlchemy # db = SQLAlchemy(server) # from app import routes, models
app/models.py
# 当前报错的代码 from flask_sqlalchemy import SQLAlchemy from app import server db = SQLAlchemy(server) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) # 方案2尝试的代码 # db = SQLAlchemy() # def init_db(app): # db.init_app(app)
app/routes.py
from app import server, db from app.models import User @server.route('/') def index(): return "Hello World"
run.py
from app import server if __name__ == '__main__': # 方案2尝试调用init_db的位置 # from app.models import init_db # init_db(server) server.run(debug=True)
原本单文件可正常运行的代码
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) @app.route('/') def index(): return "Hello World" if __name__ == '__main__': app.run(debug=True)
需求
寻求适配该项目结构的正确SQLAlchemy数据库对象初始化方式,解决上述报错问题。
内容的提问来源于stack exchange,提问作者user23150151
相关产品推荐
相关产品推荐

