Flask应用执行db.create_all()建SQLAlchemy数据库报11001错误
错误核心成因
从堆栈信息能直接定位:pymysql尝试连接名为dbserver的MySQL主机时,发生了DNS域名解析失败(getaddrinfo failed),程序根本没法定位到这个主机对应的网络地址,和db.create_all()本身的ORM逻辑无关,是前置的数据库连接配置出了问题。
对应排查修复步骤
- 检查Flask配置里的数据库URI主机值:当前配置指向的主机名是
dbserver,这个名称是Docker Compose这类容器编排环境里的内部服务名,在你当前的本地Windows开发环境下没有对应的DNS解析记录,自然无法连接。如果你的MySQL是安装在本地的,把主机值改成127.0.0.1/localhost;如果是远程部署的MySQL,改成对应的可访问IP即可。 - 若确实需要通过
dbserver这个域名访问数据库(比如本地部署了关联的Docker服务网络),需要手动在系统hosts文件中添加映射:Windows环境下打开C:\Windows\System32\drivers\etc\hosts,新增一行记录<MySQL服务实际IP> dbserver,保存配置后再重试连接。 - 完成主机配置调整后,额外确认网络可达性:对应地址的MySQL服务已经正常启动、MySQL没有绑定仅本地回环地址、防火墙放行了3306端口、数据库账号有从当前IP登录的权限。
快速验证小技巧
不用直接跑完整的Flask初始化流程,先写最简单的pymysql连接脚本测试连通性,能减少排查时间:
import pymysql # 把参数替换成你修改后的实际数据库配置 test_conn = pymysql.connect( host='修改后的实际主机地址', port=3306, user='你的数据库账号', password='你的数据库密码' ) print("数据库连接测试通过") test_conn.close()
上述测试脚本运行无报错后,再执行db.create_all()即可正常创建表结构。
内容的提问来源于stack exchange,提问作者vtrd2
相关产品推荐
相关产品推荐

