pyODBC refuses to look for unixODBC, instead looks for iODBC
有没有办法让pyODBC v3.0.10寻找unixODBC驱动程序,而不是它似乎想要寻找的iODBC驱动程序?
我的理解是pyODBC v3.0.10默认是这样做的,而v3.0.7之前的版本需要手动编辑setup.py文件(参见这里的参考资料)。
还有一个线索,我运行此代码来列出我的ODBC源代码,它没有返回任何内容:
1 2 3 4 5 6 7 8 | sources = pyodbc.dataSources() dsns = list(sources.keys()) dsns.sort() sl = [] for dsn in dsns: sl.append('%s [%s]' % (dsn, sources[dsn])) print(' '.join(sl)) |
进一步背景
我一直在努力使用以下设置创建与MSSQL Server的连接:pyODBC - > unixODBC - > FreeTDS - > MS SQL。 这里记录了血腥的细节。
我已经把它缩小到一个特定的问题(我认为):pyODBC包正在寻找iODBC驱动程序而不是我安装和配置的unixODBC驱动程序。 我相信这是因为当我跑:
1 2 3 4 5 6 7 8 9 | import pyodbc pyodbc.connect( 'DRIVER=FreeTDS;' 'SERVER=MyServerIP;' 'PORT=1433;' 'DATABASE= DatabaseName;' 'UID=MyUsername;' 'PWD=MyPassword') |
我得到这个错误,引用找不到iODBC驱动程序:
1 2 3 4 5 6 7 8 9 10 | --------------------------------------------------------------------------- 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)') |
感谢您可以放下任何光线。
我相信原因是你可能已经编译pyodbc来使用iODBC(或者这可能是默认值)。如果你想确保你针对unixODBC构建pyodbc,你可以在运行
这是我在这里的答案的转贴,但这回答了这个问题的更具体的形成。希望我没有违反任何规则,但这花了我几个星期的时间来弄清楚,以及很多人的帮助。所以,如果它是一个重复的Q&amp; A,那么就是它 - 我们赢得了它。
好吧,我们解决了它 - 在这个页面和原版的很多人的帮助下,追逐了很多盲道。
(最终)怀疑,这是连接中的pyodbc链接。我正在使用pyodbc v3.0.10,从Anaconda软件包库下载。解决方案是v.3.0.9。一旦我卸载了v3.0.10,从pypi存储库下载了v3.0.9,然后构建并安装了我自己的conda软件包......就可以了。
我采取的步骤如下(注意这些特定于anaconda环境):
1 2 3 4 5 6 7 | 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页面上发布了一些内容,但它看起来并不活跃。
无论如何,谢谢大家的帮助。我希望这能节省一些时间。