树莓派4远程连接Microsoft SQL Server报[08S01]错误求助
树莓派4远程连接Microsoft SQL Server报错[08S01]排查方案
问题描述
尝试在树莓派4上通过Python的pyodbc库远程连接Microsoft SQL Server,执行代码后出现如下错误:
[08S01] [08S01][FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist (20009) (SQLDriverConnect)
已参考旧教程步骤操作,但问题仍未解决。相关代码如下:
import pyodbc dsn='sqlserverdatasource ' user='....' password='...' database='msbd' con_string='DSN=%s';UID=%s;PWD=%s;DATABASE=%s;'% (dsn, user, password, database) print("debug1") cnxn=pyodbc.connect(con_string) print("debug2")
排查与解决步骤
1. 修复代码语法错误
你的连接字符串拼接存在语法错误:字符串未正确闭合,且dsn变量末尾有多余空格。修正后的代码:
import pyodbc dsn='sqlserverdatasource' user='your_username' password='your_password' database='msbd' # 修正字符串拼接逻辑,将整个连接串放在一对引号内 con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn, user, password, database) print("debug1") cnxn=pyodbc.connect(con_string) print("debug2")
2. 验证FreeTDS配置有效性
树莓派依赖FreeTDS驱动连接SQL Server,先通过命令行测试基础连通性:
- 执行命令手动测试连接:
tsql -S sqlserverdatasource -U your_username -P your_password - 如果连接失败,检查FreeTDS配置文件(通常是
/etc/freetds/freetds.conf或~/.freetds.conf),确保配置正确:[sqlserverdatasource] host = 你的SQL Server公网/内网IP port = 1433 # SQL Server默认端口,若修改过需对应调整 tds version = 7.4 # 版本需匹配目标SQL Server:2016+用7.4,2012用7.2,更早版本用7.0
3. 排查网络连通性
- 先测试树莓派与SQL Server的网络连通:
ping 你的SQL ServerIP - 再验证端口是否开放:
若提示nc -zv 你的SQL ServerIP 1433Connection refused,需做以下操作:- 在SQL Server所在机器的防火墙中,添加1433端口的入站允许规则
- 在SQL Server Management Studio中,右键服务器→属性→连接,勾选"允许远程连接到此服务器"
- 若使用SQL Server命名实例,确保
SQL Server Browser服务处于运行状态
4. 确认SQL Server账号权限
- 确保使用的是SQL Server认证账号(而非Windows认证),且该账号拥有远程登录权限及
msbd数据库的访问权限 - 可在SQL Server上执行以下查询验证:
-- 检查账号是否存在 SELECT name, type_desc FROM sys.server_principals WHERE name = 'your_username'; -- 检查是否有数据库连接权限 SELECT has_perms_by_name('msbd', 'DATABASE', 'CONNECT') AS HasConnectPermission;
5. 升级依赖版本
你参考的教程发布于2012年,依赖版本可能过时。在树莓派上重新安装最新版依赖:
sudo apt update && sudo apt install -y freetds-dev freetds-bin unixodbc-dev pip install --upgrade pyodbc
内容的提问来源于stack exchange,提问作者Burçin Baysal
相关产品推荐
相关产品推荐

