pyODBC拒绝寻找unixODBC,而是寻找iODBC

问题描述:

有没有办法让pyODBC v3.0.10去寻找unixODBC驱动程序,而不是它看起来想要寻找的iODBC驱动程序?pyODBC拒绝寻找unixODBC,而是寻找iODBC

我的理解是pyODBC v3.0.10应该默认执行此操作,而v3.0.7之前的版本需要手动编辑setup.py文件(请参阅参考here)。

还有一个线索,我跑这个代码列出我的ODBC数据源,并且退回它没有:

sources = pyodbc.dataSources() 
dsns = list(sources.keys()) 
dsns.sort() 
sl = [] 
for dsn in dsns: 
    sl.append('%s [%s]' % (dsn, sources[dsn])) 
print('\n'.join(sl)) 

而且背景

我一直在努力用创建到MSSQL Server的连接以下设置:pyODBC - > unixODBC - > FreeTDS - > MS SQL。血淋淋的细节记录在here

我已经把它缩小到一个特定的问题(我认为):pyODBC软件包正在寻找iODBC驱动程序,而不是我已经安装和配置的unixODBC驱动程序。我相信这是因为当我运行:

import pyodbc 

pyodbc.connect(
    'DRIVER=FreeTDS;' 
    'SERVER=MyServerIP;' 
    'PORT=1433;' 
    'DATABASE= DatabaseName;' 
    'UID=MyUsername;' 
    'PWD=MyPassword') 

我得到这个错误,与不找到iODBC的驱动程序的引用:

--------------------------------------------------------------------------- 
Error          Traceback (most recent call last) 
<ipython-input-12-607f0d66e615> in <module>() 
     1 pyodbc.connect(
----> 2  'DRIVER=FreeTDS;' 
     3  'SERVER= MyServerIP;' 
     4  'PORT=1433;' 
     5  'DATABASE= DatabaseName;' 

Error: ('00000', '[00000] [iODBC][Driver Manager]dlopen(FreeTDS, 6): image not found (0) (SQLDriverConnect)') 

感谢您可以摆脱任何光线。

+0

我应该添加两件事:1)我已经通过终端的isql和tsql命令建立了良好的连接,确认了unixODBC和FreeTDS的良好安装,以及2)我已经在三个独立的Mac上复制了这些结果。 – RJH2

+0

我相信我已经在您的其他问题上回答了这里:http://*.com/questions/37933369/error-connecting-to-ms-sql-server-using-pyodbc-unixodbc-and-freetds-on- a-mac在您的pyodbc.connect()中,您需要将“FreeTDS”替换为“{FreeTDS}”,并添加“TDS_Version = 7.2”作为连接参数。 – FlipperPA

+0

谢谢,但给了一个尝试和相同的错误。它似乎没有评估FreeTDS配置文件(/usr/local/etc/freetds.conf),因为它似乎并不重要。如果清除整个文件,我会得到相同的错误。如上所述,由于某些原因,pyODBC不会查找unixODBC。它甚至从未获得FreeTDS。 – RJH2

这是对我的回答here的转发,但是这回答了这个问题的更具体的形成。希望我没有违反任何规则,但是这花了我几个星期才弄清楚,并且得到了很多人的帮助。所以,如果它是一个重复的Q & A,就这样吧 - 我们赢了。

好吧,我们解决了它 - 在这个页面上的很多人的帮助下,我们追逐了很多盲人小巷。

由于(最终)怀疑,它是连接中的pyodbc链接。我使用pyodbc v3.0.10,通过从Anaconda软件包库下载。解决方案是v.3.0.9。一旦我卸载了v3.0.10,从pypi存储库下载了v3.0.9,然后构建并安装了我自己的conda软件包......它工作正常。

我采取的步骤如下(注意,这些都是具体到一条蟒蛇环境):

conda uninstall pyodbc 

conda skeleton pypi pyodbc --version 3.0.9 

conda build pyodbc 

conda install pyodbc=3.0.9 --use-local 

一旦我回到我的Jupyter笔记本就跑上面相同的代码,它创造了一个良好的连接。

我不知道v.3.0.10有什么问题,或者它只是anaconda.org在其存储库中的文件。我已经在pyodbc github页面上发布了一些内容,但它看起来并不活跃。

无论如何,谢谢大家的帮助。我希望这能节省一些时间。

我相信原因是你可能已编译pyodbc使用iODBC(或者也许这是默认值)。如果您想确保您针对unixODBC构建pyodbc,则可以按照此处的说明(请参阅http://www.easysoft.com/developer/languages/python/pyodbc.html,标题pyodbc 3.0.x)指定在运行setup.py build之前。或者,请按照此处的说明进行操作:https://code.google.com/archive/p/pyodbc/wikis/Building.wiki

+0

我也有这种怀疑,但无法测试它。我通过'conda install pyodbc'(Anaconda)安装pyodbc。如果编译错误,我希望很多人会遇到这个问题。为了测试它,我需要建立一个conda包,我不知道该怎么做。最后,当我指定FreeTDS驱动程序路径时,它给了我一个[不同的错误](http://*.com/questions/37933369/error-connecting-to-ms-sql-server-using-pyodbc-unixodbc-and -freetds-on-a-mac),表明即使它找到unixODBC,仍然存在问题 – RJH2