実現したいこと
PythonプログラムからOracleデータベースに接続したいです。
前提
接続にあたり以下を行いました。
Oracle Instant Clientのインストール
https://www.oracle.com/jp/database/technologies/instant-client/winx64-64-downloads.html
↑上記より必要なパッケージをダウンロードし、
C:\Users[ユーザ名]\Oracle\OracleInstantClient\instantclient_21_3
に展開。
環境変数の設定
①環境変数Pathに
C:\Users[ユーザ名]\Oracle\OracleInstantClient\instantclient_21_3
を追加。
②環境変数TNS_ADMINを作成し、
C:\Users[ユーザ名]\Oracle\OracleInstantClient\instantclient_21_3\network\admin
を追加。
③環境変数NLS_LANGを作成し、
Japanese_Japan.JA16SJISTILDE
を追加。
上記①②③完了後PCを再起動。
tnsnames.oraの編集
C:\Users[ユーザ名]\Oracle\OracleInstantClient\instantclient_21_3\network\admin
に以下「tnsnames.ora」を作成。
tnsnames.ora
1ORCLCDB = 2 (DESCRIPTION = 3 (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 4 (CONNECT_DATA = 5 (SERVER = DEDICATED) 6 (SERVICE_NAME = pdb01) 7 ) 8 )
cx_Oracleのインストール
シェルから以下実行。
PowerShell
1pip install cx_Oracle
発生している問題・エラーメッセージ
下記ソースコードにて正常にcx_Oracleが実行できるか確認したところ、以下エラーが出力されます。
python
1cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "The specified module could not be found". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
該当のソースコード
python
1import cx_Oracle 2cx_Oracle.clientversion()
試したこと
sqlplusコマンドからはDBにログインできました。
PowerShell
1PS C:~~>sqlplus hogeuser/passw0rd@ORCLCDB 2 3Version 21.3.0.0.0 4 5Copyright (c) 1982, 2021, Oracle. All rights reserved. 6 7最終正常ログイン時間: 月 5月 16 2022 13:18:31 +09:00 8 9 10Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production 11Version 21.3.0.0.0 12に接続されました。 13SQL>
ちなみにデータベースはDockerコンテナ内に存在します。(0.0.0.0:1521->1521/tcpで接続)
sqlplusコマンドはローカルから実行しており、sqlplusコマンドからログインできる以上はPythonからも接続できると考えているのですが、Dockerコンテナ内にあることが問題なのでしょうか?
補足情報(FW/ツールのバージョンなど)
Windows10 64bit
Oracle Instant Client 21.3
Python 3.8.10

回答1件
あなたの回答
tips
プレビュー