pyODBC 拒绝寻找 unixODBC,而是寻找 iODBC
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 文件(参见参考文献 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 服务器的连接:pyODBC --> unixODBC --> FreeTDS --> MS SQL。血淋淋的细节记录在案 。
我已经把它缩小到一个特定的问题(我认为):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)')
感谢您提供的任何光线。
我相信原因是您可能已将 pyodbc 编译为使用 iODBC(或者这可能是默认设置)。如果您想确保针对 unixODBC 构建 pyodbc,您可以按照此处的说明在 运行 setup.py build
之前指定它(查看 http://www.easysoft.com/developer/languages/python/pyodbc.html , headline pyodbc 3.0.x
). Alternatively, try to follow the instructions here: https://code.google.com/archive/p/pyodbc/wikis/Building.wiki
这是我的回答 的转贴,但它回答了这个更具体的问题。希望我没有违反任何规则,但这花了我几个星期的时间才弄清楚,并得到了很多人的帮助。因此,如果它是重复的问答,那就这样吧——我们赢得了它。
嗯,我们解决了这个问题——在这个页面和原版的很多人的帮助下,追了很多死胡同。
正如(最终)怀疑的那样,它是连接中的 pyodbc link。我正在使用 pyodbc v3.0.10,通过从 Anaconda 包存储库下载。解决方案是 v.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
当我回到我的 Jupyter notebook 和 运行 上面的相同代码后,它建立了良好的连接。
我不知道 v.3.0.10 有什么问题,或者只是 anaconda.org 在其存储库中的文件有问题。我也在 pyodbc github 页面上发布了一些内容,但它看起来并不那么活跃。
总之,谢谢大家的帮助。我希望这可以节省一些时间。
有没有办法让 pyODBC v3.0.10 寻找 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 服务器的连接:pyODBC --> unixODBC --> FreeTDS --> MS SQL。血淋淋的细节记录在案
我已经把它缩小到一个特定的问题(我认为):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)')
感谢您提供的任何光线。
我相信原因是您可能已将 pyodbc 编译为使用 iODBC(或者这可能是默认设置)。如果您想确保针对 unixODBC 构建 pyodbc,您可以按照此处的说明在 运行 setup.py build
之前指定它(查看 http://www.easysoft.com/developer/languages/python/pyodbc.html , headline pyodbc 3.0.x
). Alternatively, try to follow the instructions here: https://code.google.com/archive/p/pyodbc/wikis/Building.wiki
这是我的回答
嗯,我们解决了这个问题——在这个页面和原版的很多人的帮助下,追了很多死胡同。
正如(最终)怀疑的那样,它是连接中的 pyodbc link。我正在使用 pyodbc v3.0.10,通过从 Anaconda 包存储库下载。解决方案是 v.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
当我回到我的 Jupyter notebook 和 运行 上面的相同代码后,它建立了良好的连接。
我不知道 v.3.0.10 有什么问题,或者只是 anaconda.org 在其存储库中的文件有问题。我也在 pyodbc github 页面上发布了一些内容,但它看起来并不那么活跃。
总之,谢谢大家的帮助。我希望这可以节省一些时间。