0

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


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

我现在做了什么:

  • 安装 unixodbc
  • 安装 turbodbc
  • 安装 iODBC
  • 为 ODBC 安装 Mysql 连接器
  • 在 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

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

如果有人可以帮助我,我会很高兴,在此先感谢!;-)

更新

我在 R 中尝试使用 RODBC,效果很好。所以我确定这是TurbODBC的问题,但我现在无法调试(我认为是C++)代码......

更新#2

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

4

1 回答 1

2

这里有一些建议:

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

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

于 2017-02-22T17:14:27.657 回答