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

升级至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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:20:15