启用Integrated Security=True时pyodbc为何用空登录名连接失败?
解决pyodbc连接SQL Server时“登录失败,用户名为空”的问题
可能的原因及解决方法
1. 替换身份验证参数写法
把连接字符串里的Integrated Security=True换成Trusted_Connection=Yes,部分ODBC驱动对后者的兼容性更好:
import pyodbc connection_string = 'Driver={ODBC Driver 17 for SQL Server};Server=.;Database=testdb;Trusted_Connection=Yes;' connection = pyodbc.connect(connection_string)
2. 检查驱动与Python的位数匹配
如果Python版本和ODBC驱动的位数不匹配(比如Python是32位,驱动是64位),会导致身份验证信息无法正确传递:
- 打开命令提示符,输入
python --version查看位数(例如显示[MSC v.1929 64 bit (AMD64)]即为64位) - 卸载不匹配的ODBC驱动,安装对应位数的版本
3. 明确指定服务器实例名
有时候Server=.无法正确解析本地SQL Server实例,尝试换成具体名称:
- 默认实例用
Server=localhost或Server=(local) - 命名实例(如SQLEXPRESS)用
Server=.\SQLEXPRESS
4. 清除连接字符串的隐藏字符
复制粘贴可能带入全角空格或不可见字符,导致属性解析错误。手动重新输入连接字符串,避免复制操作。
5. 确认数据库权限配置
虽然SSMS能连接,仍需确认当前Windows用户对testdb有连接权限:
- 打开SSMS,用Windows身份验证登录,展开
安全性->登录名,找到你的Windows用户(格式一般为DOMAIN\username) - 右键选择属性,切换到
用户映射,确认testdb已勾选,且至少分配了public角色
内容的提问来源于stack exchange,提问作者Rainbolt
相关产品推荐
相关产品推荐

