Python使用SQLAlchemy远程连接群晖NAS的MariaDB数据库报错求助
核心错误为mariadb.OperationalError: Can't connect to server on '192.168.1.111' (36),后续IPython相关报错是调用sys.exit(1)触发的次生错误,优先解决连接问题即可。
1. 群晖端配置排查
- 确认MariaDB开启远程访问:打开群晖套件中心的MariaDB设置页,勾选「启用TCP/IP连接」,核对端口是否为你使用的3307,同时将允许访问的IP段设置为你当前设备的IP,测试阶段可临时填
%允许所有IP访问(正式使用需改回指定IP)。 - 确认数据库用户权限:你使用的
my_name用户默认仅开放本地(localhost)访问权限,需在MariaDB权限设置中给该用户开放对应远程IP的访问权限,同时授予test库的操作权限。 - 确认群晖防火墙放行端口:进入群晖控制面板-安全性-防火墙,检查规则中是否放行3307端口的入站请求,测试阶段可临时关闭防火墙验证连接是否正常。
2. 本地网络连通性验证
在本地终端执行以下命令验证端口连通性,不用先运行Python代码:
- 使用telnet测试:
telnet 192.168.1.111 3307 - 使用nc测试:
nc -zv 192.168.1.111 3307
如果返回连接失败,说明是网络或群晖端配置问题,先排查上述配置即可。
3. 代码优化调整
- 你代码中定义的
port变量为字符串类型,mariadb.connect的port参数要求传入整数,后续如果要复用该变量需转成int类型,当前你直接硬编码3307无问题。 - 如果你已安装PyMySQL,可以直接用PyMySQL作为驱动连接,无需依赖mariadb官方连接器,SQLAlchemy连接串示例:
mysql+pymysql://my_name:my_pass@192.168.1.111:3307/test,适配性更好。 - 交互环境下不要调用
sys.exit(1),会触发IPython的内部报错,改成仅打印错误信息即可,不影响核心逻辑。
内容的提问来源于stack exchange,提问作者yts61
相关产品推荐
相关产品推荐

