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/