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

SQLAlchemy连接ODBC数据库失败,原pyodbc连接正常求助

解决SQLAlchemy连接MS SQL时的ODBC驱动错误

问题根源

你之前的pyodbc连接依赖DSN(数据源名称),DSN中已经预先配置了ODBC驱动信息,所以无需手动指定驱动。改用SQLAlchemy直接构建连接字符串时,必须显式声明驱动,否则ODBC驱动管理器无法匹配到对应驱动,进而抛出IM002错误。

方案1:沿用DSN的SQLAlchemy连接方式

既然原DSN可以正常工作,直接在SQLAlchemy连接字符串中复用DSN即可,无需额外指定驱动:

import urllib
from sqlalchemy import create_engine
import pandas as pd

# 替换为你的实际配置
dsn_name = "你的数据库DSN名称"
username = "你的用户名"
password = "你的密码"

# 构建连接参数
params = urllib.parse.quote_plus(f"DSN={dsn_name};UID={username};PWD={password}")
engine = create_engine(f"mssql+pyodbc:///?odbc_connect={params}")

# 测试连接并读取数据
with engine.connect() as conn:
    df = pd.read_sql("select * from dbo.DATA_LOG where timestamp LIKE '2023-06-06%'", conn)

方案2:显式指定ODBC驱动连接

如果不想依赖DSN,先确认系统中已安装的SQL Server ODBC驱动,再写入连接参数:

步骤1:查看已安装的ODBC驱动

  • Windows:搜索并打开odbcad32(ODBC数据源管理器),切换到「驱动」标签页,找到类似ODBC Driver 17 for SQL Server或SQL Server Native Client 11.0的驱动名称。
  • Linux/macOS:在终端执行命令odbcinst -q -d,终端会列出已安装的ODBC驱动列表。

步骤2:构建带驱动的连接字符串

将找到的驱动名称加入连接参数:

import urllib
from sqlalchemy import create_engine
import pandas as pd

# 替换为你的实际配置
server = "你的服务器名称"
database = "你的数据库名称"
username = "你的用户名"
password = "你的密码"
driver = "ODBC Driver 17 for SQL Server"  # 替换为你查到的驱动名称

# 构建连接参数
params = urllib.parse.quote_plus(
    f"SERVER={server};DATABASE={database};UID={username};PWD={password};DRIVER={driver}"
)
engine = create_engine(f"mssql+pyodbc:///?odbc_connect={params}")

# 测试连接并读取数据
with engine.connect() as conn:
    df = pd.read_sql("select * from dbo.DATA_LOG where timestamp LIKE '2023-06-06%'", conn)

额外提示

  • 优先选择ODBC Driver 17 for SQL Server,这是微软官方维护的最新稳定驱动,兼容性更强。
  • 使用with engine.connect()上下文管理器可自动关闭连接,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:07:58