Flask服务器运行报错:无法创建LocalProxy对象弱引用,本地正常
Flask服务器运行报错:无法创建LocalProxy对象的弱引用
问题描述
本地localhost运行Flask的app.py正常,但部署到服务器后报错,尝试修改数据库IP未解决。
报错信息
Traceback (most recent call last): File "app.py", line 27, in <module> import auth File "/tmp/pycharm_project_flaskr/auth.py", line 5, in <module> from db import get_db, User File "/tmp/pycharm_project_flaskr/db.py", line 22, in <module> db.init_app(app) File "/usr/local/lib/python3.7/site-packages/flask_sqlalchemy/extension.py", line 305, in init_app engines = self._app_engines.setdefault(app, {}) File "/usr/local/lib/python3.7/weakref.py", line 489, in setdefault return self.data.setdefault(ref(key, self._remove),default) TypeError: cannot create weak reference to 'LocalProxy' object
数据库配置代码
app = current_app DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE) app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy() db.init_app(app)
解决方法
错误原因
报错核心是current_app是Flask的LocalProxy代理对象,而SQLAlchemy的init_app()方法需要接收实际的Flask应用实例——因为内部要对app创建弱引用,但LocalProxy不支持被创建弱引用,所以触发报错。本地运行可能因上下文初始化顺序问题暂时掩盖了这个问题,服务器环境下则暴露出来。
修改方案
调整数据库初始化逻辑,避免直接用current_app,改用实际的Flask应用实例传入:
- 修改
db.py代码:
from flask_sqlalchemy import SQLAlchemy # 先初始化db实例 db = SQLAlchemy() def init_db(app, username, password, hostname, port, database): # 传入实际的app实例,配置数据库连接 db_uri = f'mysql+pymysql://{username}:{password}@{hostname}:{port}/{database}?charset=utf8' app.config['SQLALCHEMY_DATABASE_URI'] = db_uri app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db.init_app(app)
- 在主文件
app.py中初始化数据库:
from flask import Flask from db import init_db, db # 创建实际的Flask应用实例 app = Flask(__name__) # 替换为你的数据库参数 DB_USER = 'your_username' DB_PWD = 'your_password' DB_HOST = 'your_db_host' DB_PORT = 3306 DB_NAME = 'your_db_name' # 初始化数据库,传入实际的app实例 init_db(app, DB_USER, DB_PWD, DB_HOST, DB_PORT, DB_NAME) # 确保在数据库初始化后再导入其他依赖db的模块 import auth # 后续的路由等逻辑...
这样调整后,db.init_app()接收的是真实的Flask应用对象,就能正常创建弱引用,解决报错问题。
内容的提问来源于stack exchange,提问作者Coconut water
相关产品推荐
相关产品推荐

