Pyodbc在nondata python中工作,但无法在cond中加载驱动程序

2024-06-16 08:23:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的连接字符串,用于连接本地docker容器中运行的MSSQL服务器。该代码在python3.7(不是conda)中运行良好,但在任何conda环境中都会失败。我特别感兴趣的是让它在Jupyter笔记本上运行。在

我最近重新安装了水蟒,但这似乎无关,因为它仍然不起作用。我的.bash_配置文件似乎有点混乱,但在我确定自己在做什么之前,我一直不愿意做些改变。在

据我所知,我的conda版本的python无法找到其他版本python正在使用的pyodbc驱动程序。在

对于我来说,这段代码可以在Python的任何非conda版本中工作,但在其他地方却失败了。在

import pyodbc
drivers = [item for item in pyodbc.drivers()]
driver = drivers[-1]
print("driver:{}".format(driver))
server = '192.168.0.4'
database = 'XXXXXXX'
uid = 'sa'
pwd = 'XXXXXXXXXX'
con_string = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={uid};PWD={pwd}'
print(con_string)
cnxn = pyodbc.connect(con_string)


cursor = cnxn.cursor()
print('connected')

cursor.execute('SELECT * FROM TB_STYLE_AUDIT')

for row in cursor:
    print(row)

预期结果(缩短):

^{pr2}$

以下是conda的错误:

IndexError                                Traceback (most recent call last)
<ipython-input-1-ea3728340faa> in <module>
      2 
      3 drivers = [item for item in pyodbc.drivers()]
----> 4 driver = drivers[-1]
      5 print("driver:{}".format(driver))
      6 server = '192.168.0.4'

IndexError: list index out of range

编辑以添加此代码也可在conda之外工作:

import pyodbc

#drivers = [item for item in pyodbc.drivers()]
#driver = drivers[-1]
#print("driver:{}".format(driver))
driver = 'ODBC Driver 17 for SQL Server'
server = '192.168.0.4'
database = 'XXXXXXX'
uid = 'sa'
pwd = 'XXXXXXX'
con_string = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={uid};PWD={pwd}'
print(con_string)
cnxn = pyodbc.connect(con_string)


cursor = cnxn.cursor()
print('connected')

cursor.execute('SELECT * FROM TB_STYLE_AUDIT')

for row in cursor:
    print(row)

但在笔记本中会产生以下错误:

---------------------------------------------------------------------------
Error                                     Traceback (most recent call last)
<ipython-input-2-3f7d96055440> in <module>
     11 con_string = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={uid};PWD={pwd}'
     12 print(con_string)
---> 13 cnxn = pyodbc.connect(con_string)
     14 
     15 

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found (0) (SQLDriverConnect)")

Tags: inforuidstringserverdriverpwditem
1条回答
网友
1楼 · 发布于 2024-06-16 08:23:02

如果是OSX,请按照Drivers and Driver Managers的说明操作。它也很有用Install FreeTDS, unixODBC and pyodbc on OS X

关键问题是配置文件,如下所示:

在驱动程序和实例上,编辑/usr/local/etc/odbcinst.ini文件公司名称:

[FreeTDS]
Description=FreeTDS Driver for Linux & MSSQL
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
UsageCount=1

[unixodbc]
Description=unixodbc
ODBCInstLib=/usr/local/Cellar/unixodbc/2.3.1/lib/libodbcinst.dylib
DriverManagerEncoding=UTF-16

测试日志:

^{pr2}$

相关问题 更多 >