从Heroku应用连接PythonAnywhere MySQL数据库的问题求助
解决Heroku连接PythonAnywhere MySQL数据库的分步指南
首先,先解决你遇到的bash: heroku: command not found问题:
你在Heroku网页版控制台里执行
heroku命令是行不通的——这个控制台是你的应用运行的服务器 shell,不是用来操作Heroku平台的CLI环境。你需要在本地电脑上安装Heroku CLI,才能执行heroku config:add这类管理命令。
接下来是完整的连接步骤:
1. 本地安装并登录Heroku CLI
- 下载对应系统的Heroku CLI(Windows/macOS/Linux均有支持),安装完成后打开本地终端。
- 执行登录命令:
heroku login,按照提示在浏览器中完成登录验证。
2. 整理PythonAnywhere MySQL的正确连接信息
先在PythonAnywhere控制面板中找到你的数据库详情:
- 数据库主机:格式为
你的PythonAnywhere用户名.mysql.pythonanywhere-services.com(例如elias.mysql.pythonanywhere-services.com) - 数据库用户名:格式为
你的PythonAnywhere用户名$数据库名(例如你创建的数据库叫myapp_db,用户名就是elias$myapp_db) - 数据库密码:你创建数据库时设置的密码
- 数据库名:你在PythonAnywhere创建的数据库名称(例如
myapp_db) - 端口:默认3306
3. 配置Heroku环境变量(DATABASE_URL)
在本地终端执行正确的config:set命令,替换为你的实际信息:
heroku config:set DATABASE_URL="mysql2://PYTHONANYWHERE_USER:PASSWORD@DATABASE-HOST-ADDRESS:3306/DATABASE-NAME" --app HEROKU-APP-NAME
注意:如果你的密码包含特殊字符(比如
@、&、!),需要对这些字符进行URL编码(例如@换成%40,&换成%26),否则会导致连接字符串解析错误。
4. 允许Heroku访问PythonAnywhere的MySQL数据库
PythonAnywhere的MySQL默认只允许内部环境访问,必须手动添加外部访问权限:
- 登录PythonAnywhere,进入
Databases页面 - 找到你的数据库,点击
Allow external access选项 - 在这里添加Heroku的出站IP地址范围。如果你不确定具体IP,可以暂时添加
0.0.0.0/0(允许所有外部IP访问,生产环境建议只添加Heroku官方公布的IP段,避免安全风险)
5. 在Heroku应用中配置数据库连接
根据你的应用类型做相应配置:
例1:Python/Django应用
- 确保安装了数据库驱动,在
requirements.txt中添加:dj-database-url>=0.5.0 mysqlclient>=2.2.0 - 在
settings.py中配置数据库:import os import dj_database_url DATABASES = { 'default': dj_database_url.config(default=os.getenv('DATABASE_URL')) }
例2:Python/Flask+SQLAlchemy应用
- 在
requirements.txt中添加:sqlalchemy>=2.0.0 mysqlclient>=2.2.0 - 在应用代码中获取环境变量并创建连接:
import os from sqlalchemy import create_engine DATABASE_URL = os.getenv("DATABASE_URL") engine = create_engine(DATABASE_URL)
6. 验证连接
- 部署更新后的应用到Heroku:
git push heroku main - 查看应用日志确认没有数据库连接错误:
heroku logs --app HEROKU-APP-NAME --tail,也可以在Heroku网页控制台中执行测试连接的代码。
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

