Windows运行旧版Django项目报socket模块无AF_UNIX属性如何解决?
问题根因
AttributeError: module 'socket' has no attribute 'AF_UNIX' 报错的核心原因是Windows系统不支持Unix域套接字,你的Django项目数据库配置错误导致pymysql尝试用Unix套接字方式连接MySQL,才触发了该报错。你手动修改pymysql源码的操作属于错误处理方式,才会导致后续的参数类型报错。
解决步骤
- 首先恢复你修改过的
Python37\site-packages\pymysql\connections.py文件的原始内容,禁止直接修改第三方依赖包的源码,会导致环境一致性问题。 - 打开Django项目根目录下的
settings.py文件,找到DATABASES配置块。 - 调整数据库连接配置:
HOST字段必须填写MySQL服务的IP地址,本地运行填127.0.0.1即可,不可留空、不可填写Unix套接字路径(类似/tmp/mysql.sock的内容)PORT字段填写MySQL服务的端口,默认值为3306- 删掉
OPTIONS配置项里的unix_socket相关配置(如果存在的话)
正确配置参考如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的实际数据库名', 'USER': '数据库登录用户名', 'PASSWORD': '数据库登录密码', 'HOST': '127.0.0.1', 'PORT': '3306', } }
- 确认本地MySQL服务已经正常启动后,重新执行启动命令
python manage.py runserver 192.168.23.12:8000即可。
补充说明
你修改AF_UNIX为AF_INET后出现AF_INET address must be tuple, not str报错的原因是:AF_INET对应TCP协议连接,需要传入(IP地址, 端口)格式的元组作为连接参数,而原逻辑里Unix域套接字传入的是套接字文件路径字符串,类型不匹配才会触发该报错,进一步验证了修改源码的方式不可行。
内容的提问来源于stack exchange,提问作者Abc0Cba
相关产品推荐
相关产品推荐

