0

TLDR: Unicode ドライバーを使用しないでください。ansi を使用してください!


Pandas/SQLAlchemy ではなく、TurbODBC 経由で DB に接続したいと考えています。

私が今までにしたこと:

  • unixodbc のインストール
  • ターボDBCのインストール
  • 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 ドライバーに変更しました。ユニコードテーブルを含むデータベースのため、これはユニコードである必要があると思いました...しかし、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 に答える