升级至Python3.10后使用pyodbc连接SQL Server遇InterfaceError
诊断与解决Python3.10下pyodbc连接SQL Server的接口错误
问题概述
原Python脚本使用pyodbc连接SQL Server数据库,在Python3.7.3环境下运行正常,升级至Python3.10后出现接口错误,已配置环境变量并在连接字符串指定驱动,但问题未解决。
环境信息
- 原Python版本:3.7.3(无异常)
- 当前Python版本:3.10
- 操作系统:类Unix系统
代码片段
import pyodbc import pandas as pd with open('in.txt', "r") as file: readline=file.read().split("\n") pwd_in = readline[0] def connect_to_sc(): seoud_connection = pyodbc.connect( Driver = 'SQLServer-Driver', Server = 'SKL2SQ6.org,2893', Database = 'Seroud', User = 'JKL_User', Password = pwd_in, Trusted_Connection = 'No' ) return seoud_connection
环境配置命令
source /sys_apps_01/python/python310/profile/env.sh export ODBCINI=/sys_apps_01/python/python310/odbc/odbc.ini export ODBCINSTINI=/sys_apps_01/python/python310/odbc/odbcinst.ini export LD_LIBRARY_PATH=/sys_apps_01/python/python310/sqlserver/msodbcsql17/lib64:$LD_LIBRARY_PATH python3.10 main.py
错误信息
File location using os.getcwd(): /cus_intel_01/suim/kls/emailmanual Traceback (most recent call last): File "/cus_intel_01/suim/kls/emailmanual/main.py", line 24, in <module> exec(open(path).read()) File "<string>", line 68, in <module> File "<string>", line 14, in connect_to_sc pyodbc.InterfaceError: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')
解决建议
1. 核对驱动名称匹配性
连接字符串中Driver的值必须与odbcinst.ini文件中定义的驱动名称完全一致。例如:
- 如果
odbcinst.ini中驱动条目名为[ODBC Driver 17 for SQL Server],则连接字符串需改为Driver='{ODBC Driver 17 for SQL Server}' - 若自定义名称为
SQLServer-Driver,需确保odbcinst.ini中存在完全匹配的条目
2. 检查odbcinst.ini配置有效性
打开/sys_apps_01/python/python310/odbc/odbcinst.ini,确认驱动配置正确:
[SQLServer-Driver] Description=Microsoft ODBC Driver 17 for SQL Server Driver=/sys_apps_01/python/python310/sqlserver/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1 UsageCount=1
- 验证
Driver指向的库文件路径存在且正确 - 确保文件权限允许运行脚本的用户读取
3. 确认环境变量生效
执行脚本前,先运行以下命令验证环境变量是否正确加载:
echo $ODBCINSTINI echo $LD_LIBRARY_PATH
若输出路径与配置不符,需检查env.sh内容或手动设置的变量是否存在拼写错误。
4. 重装匹配版本的pyodbc
Python版本升级后,旧版pyodbc可能存在兼容性问题,执行以下命令重装:
pip3.10 uninstall -y pyodbc pip3.10 install pyodbc
确保pyodbc是针对Python3.10编译的版本,能正确链接当前环境的unixODBC库。
5. 用isql测试基础连接
跳过Python,直接用unixODBC的isql工具测试连接,验证ODBC配置是否正常:
isql -v SQLServer-Driver SKL2SQ6.org,2893 JKL_User 你的密码
如果isql也无法连接,说明问题出在ODBC驱动配置,而非Python代码。
6. 检查库文件权限
确保/sys_apps_01/python/python310/sqlserver/msodbcsql17/lib64下的库文件对运行脚本的用户有读权限:
ls -l /sys_apps_01/python/python310/sqlserver/msodbcsql17/lib64/libmsodbcsql*.so
若权限不足,执行chmod +r修改权限。
内容的提问来源于stack exchange,提问作者user3369545
相关产品推荐
相关产品推荐

