この記事は公開から2年以上経過しています。
32bit版のOracle Instant Clientが導入されている開発環境で64bit版のPythonを使いSqlAlchemy経由でOracleへのアクセスを試行したところ、cx_Oracle絡みのエラーが発生してしまったので、そのときの対応内容についての備忘録。
問題
SqlAlchemyでOracleデータベースにアクセスすると
Exception has occurred: DatabaseError
(cx_Oracle.DatabaseError) DPI-1047: Cannot locate a 64-bit Oracle Client library: "path/to/oci.dll is not the correct architecture".
See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
(Background on this error at: https://sqlalche.me/e/14/4xp6)The above exception was the direct cause of the following exception:
のようなエラーが発生する。
原因
cx_Oracleから適切なOracle Instant Clientが見えていない。
対応
SqlAlchemyを利用する前に使用したいOracle Instant Clientを直接cx_Oracleに設定しておく。
※お使いのPythonが32bitなら32bit版、64bitなら64bit版のOracle Instant Clientのパスを指定する。
import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir='path/to/instantclient')
Oracleの環境変数を設定する方法もあるようですが、私のように32bitと64bitの開発環境が共存していているなどパソコン側の環境設定を安易に変えることができない場合は、この方法が役立つかもしれません。
参考ウェブサイトなど
- cx_Oracle
cx_Oracle 8 Initialization
以上です。