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

PythonAnywhere无Flask/Django时Python连接MySQL无响应问题求解

问题根因

PythonAnywhere的MySQL服务有平台专属访问规则,加上MySQLdb默认无超时配置,配置不符合规则时不会主动抛错,会直接挂起无响应,该场景完全不需要依赖Flask、Django等Web框架,直接运行普通Python脚本即可连接。

分步解决方法
  • 确认脚本运行环境:必须在PythonAnywhere平台内置的Bash/Python控制台、平台托管的定时任务/常驻进程中运行脚本。PythonAnywhere的MySQL实例不对外开放公网访问,从你本地电脑直接运行脚本连接会一直卡住无响应,不会返回明确错误,这是最高发的触发原因。
  • 核对连接参数准确性:
    • 主机地址从PythonAnywhere后台「Databases」页面直接复制,格式为你的用户名.mysql.pythonanywhere-services.com,不要手动拼写避免字符错漏
    • 数据库名必须携带用户名$前缀,例如用户名为myuser、库名为mydb时,完整库名是myuser$mydb,$符号不可省略
    • 连接密码是你在Databases页面单独设置的MySQL专用密码,和PythonAnywhere账号的登录密码互相独立,遗忘可直接在页面重置
    • 传入的密码参数是字符串类型,需要用引号包裹,原有代码里passwd = XXX如果没加引号会直接触发变量未定义错误
  • 增加连接超时配置:MySQLdb默认不设置连接超时,网络不通时会无限等待,在connect()方法中添加connect_timeout=10参数,连接失败时10秒就会抛出明确错误,不会一直无响应。
  • 验证表和数据存在:如果查询的表不存在、或者表内无数据,遍历游标的循环不会输出任何内容,会被误认为无响应。可以先执行SHOW TABLES语句确认目标表存在,再执行业务查询。
修正后可直接运行的参考代码
import MySQLdb

# 替换所有占位参数为你的真实配置
db = MySQLdb.connect(
    host = "myuser.mysql.pythonanywhere-services.com",
    user = "myuser",
    passwd = "你的MySQL专用密码",
    db = "myuser$db_name",
    connect_timeout=10
)

cursor = db.cursor()

# 校验库内表列表
cursor.execute("SHOW TABLES")
print("当前数据库下的表:", [table[0] for table in cursor.fetchall()])

# 执行业务查询
cursor.execute("SELECT * FROM table_name")
print("查询结果:")
for row in cursor.fetchall():
    print(row)

cursor.close()
db.close()

补充:免费版PythonAnywhere账号需要先进入Databases页面点击初始化MySQL按钮,设置完密码后数据库实例才会启动,未初始化时连接也会挂起无响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:36:23