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.ini
ansi 驱动程序。我认为这必须是由于数据库的 unicode,它包含 unicode 表......但是使用 ansi,当我在使用 ansi 驱动程序时在设置文件中手动将编码设置为 utf8 时,一切正常(仅)。不知道错误发生的原因或方式,但此解决方法有效。