You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:44:56