非管理员Windows用户从Python连接SQL Server报错登录失败,如何解决?
问题原因与解决方法
1. 连接字符串参数错误(对应报错中的Invalid connection string attribute)
SQL Server ODBC驱动不支持单独书写port = 1433的参数格式,指定端口需要直接拼接在Server参数后,使用逗号分隔,你可以直接删掉连接字符串里的port = 1433;行,若确实需要指定端口则将Server行修改为Server=XXXXXXXX,1433;即可消除该类报错。
2. 数据库登录失败(对应报错中的Cannot open database "XXX" requested by login. Login failed)
你使用的是Trusted_Connection=yes即Windows身份验证,和SSMS的登录逻辑一致,请优先排查以下两点:
- 连接字符串中
Database参数填写的XXX是否为真实存在的数据库名称,注意部分SQL Server实例会开启大小写校验,需要和实际库名完全一致 - 你当前登录Windows的账号是否被分配了该数据库的访问权限:可先通过SSMS登录后手动展开对应数据库,确认能否正常访问库内的表数据,如果SSMS也无法访问,需要联系数据库管理员为你的Windows账号开通对应库的访问权限。
修正后的代码示例
import pyodbc conn = pyodbc.connect('Driver={SQL Server};' 'Server=XXXXXXXX,1433;' # 端口直接跟在服务器地址后,用逗号分隔 'Database=XXX;' # 替换为你真实存在且有权限访问的数据库名称 'Trusted_Connection=yes;')
可选优化:如果修正后仍存在驱动兼容问题,可以将连接字符串里的Driver参数替换为本地已安装的更高版本ODBC驱动,例如Driver={ODBC Driver 17 for SQL Server},版本号和你本地安装的ODBC驱动版本保持一致即可。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

