使用pyodbc连接SQL Server报错:未找到数据源名称且无默认驱动
解决pyodbc连接SQL Server时的IM002驱动找不到错误
先修正代码里的致命语法错误
你提供的两段代码都存在同一个问题:连接字符串拆成多行后没有用+拼接,导致pyodbc只接收到了Driver=那一段,服务器、数据库等关键参数根本没传入,这是触发错误的核心原因之一。
修正后的代码结构示例(以ODBC Driver 17为例):
import pyodbc cnxn = pyodbc.connect( "Driver={ODBC Driver 17 for SQL Server};" "Server=localhost,1443;" "Database=emp;" "UID=sam;" "PWD=xyz@123;" )
驱动名称要写对
注意:SQL Server Native Client 17.0是错误的驱动名称,官方ODBC驱动17的标准名称是{ODBC Driver 17 for SQL Server};而SQL Server Native Client 11.0是正确的(仅适配SQL Server 2012及更早版本)。
你可以在Python里执行以下代码,查看系统中已安装的所有ODBC驱动,确保代码里的名称和输出完全一致:
import pyodbc print(pyodbc.drivers())
移除身份验证参数冲突
你的连接字符串同时写了user/password和Trusted_Connection=yes,这两个参数互斥:
- 用SQL Server账号登录:删除
Trusted_Connection=yes,保留UID和PWD(或user/password,UID/PWD是ODBC标准写法) - 用Windows身份验证登录:删除
user和password,保留Trusted_Connection=yes
完整正确示例
1. SQL Server账号登录
import pyodbc cnxn = pyodbc.connect( "Driver={ODBC Driver 17 for SQL Server};" "Server=localhost,1443;" # 端口用逗号分隔,不是冒号 "Database=emp;" "UID=sam;" "PWD=xyz@123;" )
2. Windows身份验证登录
import pyodbc cnxn = pyodbc.connect( "Driver={ODBC Driver 17 for SQL Server};" "Server=localhost,1443;" "Database=emp;" "Trusted_Connection=yes;" )
额外排查点
- 确认SQL Server服务正在运行,且允许对应方式的连接
- 检查端口号是否正确:默认是1433,你写的1443要和实际配置一致
- 确认数据库
emp存在,账号sam有访问该数据库的权限
内容的提问来源于stack exchange,提问作者Shivam Nirmal
相关产品推荐
相关产品推荐

