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)')
感谢您可以摆脱任何光线。
这是对我的回答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
我也有这种怀疑,但无法测试它。我通过'conda install pyodbc'(Anaconda)安装pyodbc。如果编译错误,我希望很多人会遇到这个问题。为了测试它,我需要建立一个conda包,我不知道该怎么做。最后,当我指定FreeTDS驱动程序路径时,它给了我一个[不同的错误](http://stackoverflow.com/questions/37933369/error-connecting-to-ms-sql-server-using-pyodbc-unixodbc-and -freetds-on-a-mac),表明即使它找到unixODBC,仍然存在问题 – RJH2
我应该添加两件事:1)我已经通过终端的isql和tsql命令建立了良好的连接,确认了unixODBC和FreeTDS的良好安装,以及2)我已经在三个独立的Mac上复制了这些结果。 – RJH2
我相信我已经在您的其他问题上回答了这里:http://stackoverflow.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
谢谢,但给了一个尝试和相同的错误。它似乎没有评估FreeTDS配置文件(/usr/local/etc/freetds.conf),因为它似乎并不重要。如果清除整个文件,我会得到相同的错误。如上所述,由于某些原因,pyODBC不会查找unixODBC。它甚至从未获得FreeTDS。 – RJH2