Pythonを使用したOracleDBへの接続

Oct 21 2020

Pythonを使用してOracleデータベースに接続しようとしています。現在、cx_Oracleを使用して接続していますが、機能しません...

#!/usr/bin/python3
import cx_Oracle

dsn_tns = cx_Oracle.makedsn('Host Name', 'Port Number', service_name='Service Name')

conn = cx_Oracle.connect(user=r'user', password='password', dsn=dsn_tns)

c = conn.cursor()
c.execute('select * from person')

conn.close()

エラー:

conn = cx_Oracle.connect(user=r'g_user', password='G_user', dsn=dsn_tns)
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help

私はサイトに行きましたが、助けになるものは何も見つかりませんでした...

私のコードの何かが間違っていますか、それとも他の何かですか?

回答

1 ChristopherJones Oct 22 2020 at 05:52

あなたのエラーは

DPI-1047:64ビットのOracleクライアントライブラリが見つかりません:「libclntsh.so:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリはありません」。

Pythonプロセスを開始する前に、オペレーティングシステムの検索パスにOracle Linux64ビットクライアントバイナリが必要です。

最も簡単な方法は、無料のOracle InstantClientをインストールすることです。最新の19cバージョンを使用します。これにより、Oracle DB11.2以降に接続できます。インストール手順は、ダウンロードページの下部にあります。RPMをインストールすると、すべてが自動的に構成されます。ZIPSをインストールする場合ldconfigは、説明にも示されているライブラリ検索パスを設定することをお勧めします。

1 AlonBarad Oct 21 2020 at 20:36

正しいoracleクライアントがインストールされていることを確認してください(oracleクライアントパッケージはここ「https://www.oracle.com/in/database/technologies/instant-client/winx64-64-downloads.html」から見つけて追加しますpythonがインストールされているフォルダー内のダウンロードされたフォルダーを、この場所(クライアントパッケージフォルダーの場所)をシステムの環境変数に追加します。これが機能することを願っています。

まず、OS、Python、およびOracle InstantClientアーキテクチャの互換性を確認することをお勧めします。

import platform
platform.architecture()

次に、Jupyterノートブック内にOracle InstantClientを設定することを強くお勧めします。

import os
os.environ["PATH"] = "Complete Location of Instant Client Folder" + ";" + os.environ["PATH"]

ソース:cx_Oracleエラー。DPI-1047:64ビットのOracleクライアントライブラリが見つかりません