我已经在这几个小时了.我无法通过pyodbc连接到数据库,但我可以使用
tsql和isql连接.
我现在只是在尝试(这可能是错的,但说明了我的观点):
import pyodbc pyodbc.connect("DRIVER={dev};SERVER=epdbdev01;DATABASE=something;USER=epnet2;OPTION=3;")
我明白了
Error: ('00000','[00000] [iODBC][Driver Manager]dlopen({dev},6): image not found (0) (sqlDriverConnect)')
我可以通过isql连接就好了,为了好玩:
$isql -v dev_fail user pass [IM002][unixODBC][Driver Manager]Data source name not found,and no default driver specified [Isql]ERROR: Could not sqlConnect $isql -v dev user pass +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+
您可以看到,如果我使用无效的DSN,我可能会出错,并且使用正确的DSN.现在,错误DSN的错误与我使用pyodbc时出现的错误相同,所以看起来似乎有些问题.
我挣扎了这个我已经重新安排了几次,现在我的odbc.ini和odbcinst.ini从我的自制安装到我的家庭目录的sym链接如下:
.freetds.conf -> /usr/local/Cellar/freetds/0.91/etc/freetds.conf .odbc.ini -> /usr/local/Cellar/unixodbc/2.3.2/etc/odbc.ini .odbcinst.ini -> /usr/local/Cellar/unixodbc/2.3.2/etc/odbcinst.ini
最后,我的odbc.ini和odbcinst.ini文件:
ODBC.INI
[dev] Driver = FreeTDS Description = please work ServerName = epdbdev01 UID = user PWD = pass
ODBCINST.INI
[FreeTDS] Description = FreeTDS Driver = /usr/local/Cellar/freetds/0.91/lib/libtdsodbc.so Setup = /usr/local/Cellar/freetds/0.91/lib/libtdsodbc.so client charset = utf-8
pyodbc会在某处找到我刚刚遗漏的驱动程序信息吗?我正处于这个杂草上,我可能已经克服了一些问题,但是如果isql工作,我会想象pyodbc会依赖于相同的连接信息,但显然现在.
解决方法
最后我把odbc.ini和odbcinst.ini放在/ etc.另外,我用–with-unixodbc命令从homebrew重新安装了freetds并且它有效.第5次阅读这个
blog by JD Long帮助我获得了iODBC vs unixODBC断开连接.