我已经困扰了好几个小时了。我无法通过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是通过符号链接从homebrew安装中链接到我的主目录,如下所示:
.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应该会利用相同的连接信息,但显然现在不行。