Flask+MySQL配置报错:需设置SQLALCHEMY_DATABASE_URI或SQLALCHEMY_BINDS
问题根源与修复方案
问题根源
- 配置加载顺序错误:你在初始化
SQLAlchemy实例(db = SQLAlchemy(app))之后才执行app.config.from_object(Config)加载配置。SQLAlchemy初始化时,Flask应用还未读取到SQLALCHEMY_DATABASE_URI配置项,因此触发了缺少数据库连接信息的错误。 - 数据库URI语法错误:
SQLALCHEMY_DATABASE_URI的值末尾多了一个多余的单引号(city'),这会导致URI解析失败,即便顺序正确也无法正常连接数据库。 - 额外拼写问题:
MAIL_USE_TSL是拼写错误,正确写法应为MAIL_USE_TLS(字母L和I混淆),后续使用邮件功能时会受影响。
修复步骤
1. 调整配置加载顺序
修改__init__.py,确保先加载配置再初始化SQLAlchemy:
from flask import Flask from flask_bootstrap import Bootstrap from flask_sqlalchemy import SQLAlchemy from flask_mail import Mail, Message from app.config import * app = Flask(__name__) # 先加载配置到Flask应用 app.config.from_object(Config) Bootstrap(app) # 再初始化SQLAlchemy实例 db = SQLAlchemy(app) from app import views from app import admin_views from app.dbmodels import * with app.app_context(): db.create_all()
2. 修正数据库URI与邮件配置拼写
修改Config类中的错误项:
import os class Config: DEBUG = True TESTING = False SESSION_COOKIE_SECURE = True # 移除末尾多余的单引号 SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:tool789@localhost/city" SQLALCHEMY_TRACK_MODIFICATIONS = False SECRET_KEY = os.urandom(24) MAIL_SERVER = "Yourdomain" MAIL_USERNAME = "username" MAIL_PASSWORD = "password" MAIL_PORT = 456 MAIL_USE_SSL = True # 修正拼写错误 MAIL_USE_TLS = False
内容的提问来源于stack exchange,提问作者Pourya Mohamadi
相关产品推荐
相关产品推荐

