TLDR:不要使用unicode驱动程序,请使用ansi!



我想通过TurbODBC而不是Pandas / SQLAlchemy连接到数据库。

我现在所做的是:


安装unixodbc
安装turbodbc
安装iODBC
为ODBC安装Mysql Connector
在iODBC Admin中配置端口和服务器
使用用户和通行证在iODBC Admin中测试连接:正常工作!


现在,我尝试执行以下操作:

from turbodbc import connect
connect(dsn="mydsn", user="myuser", password="mypass")


并收到以下错误消息:

---------------------------------------------------------------------------
DatabaseError                             Traceback (most recent call last)
<ipython-input-2-bbbc3a4c2880> in <module>()
----> 1 connect(dsn="mydsn", user="myuser", password="mypass")

/Users/myuser/anaconda2/lib/python2.7/site-packages/turbodbc/exceptions.pyc in wrapper(*args, **kwds)
     31             return f(*args, **kwds)
     32         except InternError as e:
---> 33             raise DatabaseError(str(e))
     34     return wrapper

DatabaseError: ODBC error
state: H


我不知道该怎么办,也没有发现与此错误有关的任何问题。

如果有人可以帮助我,我将非常高兴,在此先感谢您! ;-)

更新

我用RODBC在R中尝试过,工作正常。因此,我确定这是TurbODBC的问题,但目前无法调试(C ++)代码。

更新#2

我将设置文件.odbc.ini中的Mysql Connector for ODBC驱动程序更改为ansi驱动程序。我认为这必须是unicode,因为数据库包含unicode表...但是使用ansi,当我使用ansi驱动程序在设置文件中手动将编码设置为utf8时,一切正常(仅)。不知道为什么或如何发生错误,但是此替代方法有效。

最佳答案

这里有一些建议:


错误消息似乎不完整。这可能表明turbodbc构建不正确(已使用unixodbc标头进行了测试)。
如果turbodbc是用unixodbc构建的,它将使用unixodbc的数据源配置。它不会使用为iODBC配置的配置。
您可以检查unixodbc是否可以使用isql <dsn> <user> <password> -v连接到数据库。
确保unixodbc的环境变量指向您的odbc.ini。这是通过export ODBCINI=/path/to/odbc.ini完成的。
调整您的odbc.ini,直到isql可以成功连接。然后再次尝试turbodbc。


如果您仍然认为它是错误,请在https://github.com/blue-yonder/turbodbc/issues上报告它。

关于python - 无法通过turbodbc连接到数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42390287/

10-09 19:41