几个小时以来,我一直在忙这件事。我无法通过 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 已从我的自制程序安装符号链接(symbolic link)到我的主目录,如下所示:
.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
并且它起作用了。阅读此 blog by JD Long第 5 次帮助我断开了 iODBC
与 unixODBC
的连接。
关于python - Pyodbc 连接错误但 isql 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22047544/