Pyodbc连接错误但isql可以工作

4

我已经困扰了好几个小时了。我无法通过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应该会利用相同的连接信息,但显然现在不行。

1个回答

1
最后,我把odbc.iniodbcinst.ini放在了/etc目录下。此外,我使用--with-unixodbc命令从homebrew重新安装了freetds,这样就成功了。阅读JD Long的博客第五遍帮助我理解了iODBCunixODBC之间的区别。

1
根据 https://github.com/Homebrew/homebrew-core/issues/36939,"选项已被移除,但 --with-unixodbc 选项现在默认启用"。 - Chuck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接