python - Pyodbc 连接错误但 isql 工作

标签 python pyodbc unixodbc

几个小时以来,我一直在忙这件事。我无法通过 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.iniodbcinst.ini放在了/etc。此外,我使用 --with-unixodbc 命令从 homebrew 重新安装了 freetds 并且它起作用了。阅读此 blog by JD Long第 5 次帮助我断开了 iODBCunixODBC 的连接。

关于python - Pyodbc 连接错误但 isql 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22047544/

相关文章:

python - 如何将 Python 数据框类型 float64 列拆分为多列

python - 如何使用pyodbc连接到vertica

python - 使用 Python 在 MS Access 数据库中插入或更新行

python - Anaconda Python 3.5 安装 PyODBC

odbc - [unixODBC][驱动程序管理器] 无法打开 lib '/opt/cloudera/impalaodbc/lib/universal/libclouderaimpalaodbc.dylib' : file not found

ruby-on-rails-3 - 将 Redhat 连接到 SQL Server 2008 for Ruby on Rails

python - 确定 sklearn 决策树中的 split 量

python - NumPy 错误 : 'numpy.ndarray' object is not callable

python - uwsgi + django 导入错误

Pythonic 方式了解我的线程何时/为何退出