关于python: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文件(参见这里的参考资料)。

还有一个线索,我运行此代码来列出我的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,你可以在运行setup.py build之前指定,如此处所示(查看http://www.easysoft.com/developer/languages/python/pyodbc.html,标题< X1>)。或者,请尝试按照此处的说明操作:https://code.google.com/archive/p/pyodbc/wikis/Building.wiki


这是我在这里的答案的转贴,但这回答了这个问题的更具体的形成。希望我没有违反任何规则,但这花了我几个星期的时间来弄清楚,以及很多人的帮助。所以,如果它是一个重复的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页面上发布了一些内容,但它看起来并不活跃。

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