无法通过turbodbc

时间:2017-02-22 11:38:27

标签: python mysql odbc rodbc mysql-odbc-connector

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

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

我现在做了什么:

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

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

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时,一切正常(仅)。不知道错误发生的原因或方式,但这种解决方法有效。

1 个答案:

答案 0 :(得分:2)

以下是一些建议:

  1. 错误消息似乎有点不完整。这可能表明turbodbc构建错误(使用unixodbc标头测试)。
  2. 如果使用unixodbc构建turbodbc,它将使用unixodbc的数据源配置。它不会使用为iODBC配置的配置。
  3. 您可以检查unixodbc是否可以使用isql <dsn> <user> <password> -v连接到您的数据库。
  4. 确保unixodbc的环境变量指向odbc.ini。这是通过export ODBCINI=/path/to/odbc.ini完成的。
  5. 调整odbc.ini,直到isql成功连接。然后再次尝试turbodbc。
  6. 如果您仍然认为这是一个错误,请在here报告。