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

部署在Heroku上的Flask-SQLAlchemy应用无法连接MySQL服务器的解决方案求助

解决Heroku部署Flask-SQLAlchemy连接MySQL失败的问题

你遇到的问题非常典型——本地开发时,你的应用连接的是本地机器上的MySQL服务器(127.0.0.1),但Heroku的运行环境和你的本地设备完全隔离,它根本无法访问你本地的数据库,这就是为什么会抛出Can't connect to MySQL server on '127.0.0.1' ([Errno 111] Connection refused)错误。

下面是一步步的可行解决方案:

1. 在Heroku上添加MySQL数据库插件

Heroku本身不提供内置的MySQL服务,你需要通过官方支持的Add-ons来获取MySQL类数据库,推荐两个常用选项:

  • ClearDB MySQL:轻量免费的MySQL服务
  • JawsDB MariaDB:兼容MySQL的MariaDB服务

你可以通过两种方式添加:

  • Heroku CLI:打开终端,进入你的项目目录,运行对应命令:
    # 添加ClearDB
    heroku addons:create cleardb:ignite
    # 或者添加JawsDB
    heroku addons:create jawsdb:kitefin
    
  • Heroku控制台:登录Heroku官网,进入你的应用页面,找到「Add-ons」搜索框,输入上述插件名称并添加。

2. 获取Heroku提供的数据库连接URI

添加插件后,Heroku会自动将数据库的连接信息存入应用的环境变量中:

  • ClearDB对应的环境变量是CLEARDB_DATABASE_URL
  • JawsDB对应的环境变量是JAWSDB_URL

你可以通过终端查看这个URI:

# 查看ClearDB连接地址
heroku config:get CLEARDB_DATABASE_URL
# 查看JawsDB连接地址
heroku config:get JAWSDB_URL

3. 修改Flask数据库配置,适配Heroku环境

不要在代码里硬编码本地的数据库URI,而是优先读取Heroku的环境变量,同时保留本地开发的配置作为 fallback,这样本地和部署环境都能正常运行:

示例配置代码(适配ClearDB)

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 处理ClearDB URI协议适配(ClearDB默认返回mysql://,我们需要改成mysql+pymysql://)
db_uri = os.environ.get('CLEARDB_DATABASE_URL')
if db_uri:
    # 替换协议部分,确保pymysql能正常识别
    db_uri = db_uri.replace('mysql://', 'mysql+pymysql://')
    app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
else:
    # 本地开发环境使用本地数据库
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:@127.0.0.1/pharmbase'

# 关闭SQLAlchemy的修改追踪,节省服务器资源
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

示例配置代码(适配JawsDB)

JawsDB的URI已经是mysql+pymysql://格式,直接读取即可:

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('JAWSDB_URL', 'mysql+pymysql://root:@127.0.0.1/pharmbase')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

4. 确认依赖并部署更新后的代码

  • 确保pymysql已经添加到你的requirements.txt文件中,否则Heroku部署后会找不到数据库驱动:
    Flask==2.0.1
    Flask-SQLAlchemy==2.5.1
    pymysql==1.0.2
    
  • 提交代码修改并推送到Heroku:
    git add .
    git commit -m "Update database config for Heroku deployment"
    git push heroku main
    

5. 初始化Heroku上的数据库(可选)

如果你的应用需要创建表结构,可以通过Heroku CLI运行初始化命令:

# 创建所有表(如果没用迁移工具)
heroku run python -c "from your_app_module import db; db.create_all()"
# 如果用了Flask-Migrate,运行迁移
heroku run flask db upgrade

内容的提问来源于stack exchange,提问作者Otu William

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:37:28