You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyodbc连接SQL Server时报IM002错误该如何修正?

这个IM002报错的根本原因是ODBC驱动管理器无法识别你连接字符串中指定的驱动,同时你的连接字符串本身也存在多处语法错误,修正方案如下:

已存在的错误点

  • 连接字符串的键值对等号两侧不能加多余空格,Driver ={xxx}的写法不符合pyodbc的格式要求
  • 字符串拼接逻辑混乱,Server = ('my server name;多了多余左括号,Database ='my database name;引号位置错误,将固定字符串和参数变量的写法混写
  • SQL Server Native Client系列驱动早已停止官方维护,高版本SQL Server适配性差,很可能你本机根本没有安装19.0版本的Native Client驱动

修正步骤

1. 先查询本机可用的SQL Server驱动

运行以下代码直接获取当前系统适配的驱动名称,不要手动臆写:

import pyodbc
print([driver for driver in pyodbc.drivers() if 'SQL Server' in driver])

运行后会输出类似['ODBC Driver 17 for SQL Server', 'ODBC Driver 18 for SQL Server']的结果,直接使用输出列表里的驱动名称即可。

2. 修正连接字符串语法

如果直接写死连接参数,参考示例:

conn = pyodbc.connect(
    'Driver={ODBC Driver 17 for SQL Server};' # 替换为上一步查到的驱动名称
    'Server=你的服务器地址;' # 本地默认实例可写localhost,命名实例写.\实例名,远程实例写IP,端口号
    'Database=你的数据库名称;'
    'Trusted_Connection=yes;'
    # ODBC Driver 18及以上版本默认开启SSL校验,本地测试无证书的话补充下面这行
    'Encrypt=no;'
)

如果需要把服务器、数据库名称作为变量传入,用f-string写法:

server_name = "你的服务器名"
db_name = "你的数据库名"
driver_name = "你查到的驱动名"
conn = pyodbc.connect(
    f'Driver={driver_name};'
    f'Server={server_name};'
    f'Database={db_name};'
    f'Trusted_Connection=yes;'
    f'Encrypt=no;'
)

3. 位数匹配校验

如果修正后还是报同样错误,检查Python和ODBC驱动的位数是否一致:32位Python只能识别32位ODBC驱动,64位Python必须对应64位ODBC驱动,位数不匹配也会出现驱动找不到的问题。


内容的提问来源于stack exchange,提问作者PChao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:30:00