ホームページ >バックエンド開発 >Python チュートリアル >Python が Oracle に接続する際の問題を解決する方法
開発言語: Python、データベース: oracle、サードパーティライブラリ: cx_Oracle (Python と oracle 間の接続用)、prettytable (使用)データを表形式の出力で表示します)
pip install cx_Oracle
提供されている chatgpt を直接使用しますコードはクエリメソッドのみを使用したため、追加、削除、修正は行わずに確認だけを行いましたが、複数のデータを同時にクエリする必要があることを考慮して、コネクションプール機能を実装するために自分で修正しました。
import cx_Oracle import queue class OracleDatabase: # 构造函数,传入数据库连接参数 def __init__(self, user, pwd, dsn, size): self.user = user self.pwd = pwd self.dsn = dsn ## 定义连接池 self.size = size self.conn_queue = queue.Queue(maxsize=self.size) for i in range(self.size): self.conn_queue.put(self._create_connection()) # 创建数据库连接 def _create_connection(self): return cx_Oracle.connect(self.user, self.pwd, self.dsn) # 从连接池里面获取连接 def _get_conn(self): conn = self.conn_queue.get() if conn is None: self._create_connection() return conn # 将连接put到连接池中 def _put_conn(self, conn): self.conn_queue.put(conn) # 关闭所有连接 def _close_conn(self): try: while True: conn = self.conn_queue.get_nowait() if conn: conn.close() except queue.Empty: print(">>>>数据库连接全部关闭<<<<") pass # 执行查询语句 def query(self, sql, params=None): res = [] conn = self._get_conn() cursor = conn.cursor() try: if params: cursor.execute(sql, params) else: cursor.execute(sql) rows = cursor.fetchall() for row in rows: res.append(row) except Exception as e: print(str(e)) finally: cursor.close() self._put_conn(conn) return res
if __name__ == '__main__': user = "user_dba" pwd = "user_password" dsn = cx_Oracle.makedsn('0.0.0.0', '1521', service_name='s_demo_db') db = OracleDatabase(user, pwd, dsn, 2) cl_code = input("输入订单号: ").strip() print("数据信息展示:") sql_1 = """select * from table_demo c where c.cl_code = :cl_code""" results_1 = db.query(sql_1, [cl_code]) print(results_1) # ......
prettytableのインストール
pip install PrettyTable
サンプルコード
from prettytable import PrettyTable ## 接着第三部分的代码 tb_1 = PrettyTable(['**号', '**时间', '当前状态', '单号', '机构']) for rs_1 in results_1: tb_1.add_row([rs_1[0], rs_1[1], rs_1[2], rs_1[3], rs_1[4]]) print(tb_1)
使用効果は次のとおりです: 注文番号を貼り付けて Enter キーを押すと、以下の必要な情報データ (テスト データ) が直接返されます。 :
最初の問題は、cx_Oracle のインストール時のエラーです:
エラー: ホイールを構築できませんでしたcx_Oracle (pyproject.toml ベースのプロジェクトのインストールに必要です)
解決策: Microsoft C Build Tool、Microsoft C Build Tool - Visual Studio をインストールし、インストール ディレクトリを変更し、既定のオプションに従ってインストールします。 。
エラー メッセージ
cx_Oracle.DatabaseError: DPI-1047: 64 ビット Oracle クライアント ライブラリが見つかりません: 「指定されたモジュールが見つかりませんでした。」 https:// を参照してください。 cx-oracle.readthedocs.io/en/latest/user_guide/installation.html ヘルプ
解決策: oracle クライアントのディレクトリに oci、oraocci11 をコピーします (クライアントのダウンロードについては質問 3 を参照)。 oraociei11 の 3 つの DLL を Paython ディレクトリの Lib/site-packages フォルダに貼り付けます。
エラー メッセージ
cx_Oracle.DatabaseError: DPI-1072: Oracle クライアント ライブラリのバージョンはサポートされていません
Oracle クライアントをダウンロードし、解凍してインストールします。 。ダウンロード アドレス: oracle.github.io/odpi/doc/installation この問題が発生したのは、私のマシンが元々バージョン 19.18 でインストールされており、それをクライアントのバージョン 11.2 に置き換えたためです。質問 2 の手順に従って 3 つの dll ファイルをインストールしてください問題を解決するには、もう一度コピーしてください。
SQL ステートメントを構成ファイルに配置し、テーブル ヘッダーを構成して、複数のクエリを自由に拡張できるようにします。 。
ワンクリック クエリを真に実現するには、bat スクリプトを呼び出して実行します。
以上がPython が Oracle に接続する際の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。