是否有一种方法可以让pyODBC v3.0.10查找unixODBC驱动程序,而不是它想要查找的iODBC驱动程序?
我的理解是,默认情况下,pyODBC v3.0.10应该这样做,而v3.0.7之前的版本需要手动编辑setup.py文件(参见参考这里)。
还有一条线索,我运行了这段代码来列出我的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的连接: pyODBC -> unixODBC -> FreeTDS ->MSSQL。血淋淋的细节被记录为这里。
我把它缩小到了一个特定的问题(我认为):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)')谢谢你所能提供的光。
发布于 2016-06-29 18:05:37
这是我的答案这里的转贴,但这回答了这个,更具体的问题的形成。希望我没有违反任何规则,但我花了好几个星期才弄明白,还有很多人的帮助。所以如果这是一个重复的问答,那就算了吧--这是我们应得的。
嗯,我们解决了这个问题--在这个页面上的很多人的帮助下,在原始的帮助下,我们找到了很多盲目的小巷。
正如(最终)所怀疑的,这是连接中的pyodbc链接。我使用pyodbc v3.0.10,从Anaconda包存储库下载。解决方案为3.0.9节。一旦我卸载了v3.0.10,从pypi存储库下载了v3.0.9,然后构建并安装了自己的conda包.啊,真灵。
我所采取的步骤如下(请注意,这些步骤是专门针对anaconda环境的):
conda uninstall pyodbc
conda skeleton pypi pyodbc --version 3.0.9
conda build pyodbc
conda install pyodbc=3.0.9 --use-local当我回到我的木星笔记本,运行上面相同的代码,它创建了一个很好的连接。
我不知道v.3.0.10有什么问题,或者仅仅是anaconda.org在其存储库中的文件。我也在pyodbc页面上发布了一些东西,但是它看起来并不那么活跃。
不管怎样,谢谢大家的帮助。我希望这能节省一些时间。
发布于 2016-06-23 09:35:39
我相信原因是您可能已经编译了pyodbc来使用iODBC (或者这是默认的)。如果您想确保您在unixODBC上构建pyodbc,您可以按照这里的指示在运行setup.py build之前指定这个值(查看http://www.easysoft.com/developer/languages/python/pyodbc.html,标题pyodbc 3.0.x)。或者,尝试按照这里的说明:https://code.google.com/archive/p/pyodbc/wikis/Building.wiki
https://stackoverflow.com/questions/37947482
复制相似问题