ホームページ  >  記事  >  バックエンド開発  >  Python が Oracle に接続する際の問題を解決する方法

Python が Oracle に接続する際の問題を解決する方法

王林
王林転載
2023-04-25 10:07:062192ブラウズ

    テクニカルフレームワーク

    開発言語: Python、データベース: oracle、サードパーティライブラリ: cx_Oracle (Python と oracle 間の接続用)、prettytable (使用)データを表形式の出力で表示します)

    開発手順

    1. cx_Oracle

    pip install cx_Oracle

    2. データベース操作クラスを作成します

    提供されている 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

    3. 注文番号を入力し、クエリを実行します

    if __name__ == &#39;__main__&#39;:
        user = "user_dba"
        pwd = "user_password"
        dsn = cx_Oracle.makedsn(&#39;0.0.0.0&#39;, &#39;1521&#39;, service_name=&#39;s_demo_db&#39;)
        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)
    	# ......

    4. 印刷形式

    prettytableのインストール

    pip install PrettyTable

    サンプルコード

    from prettytable import PrettyTable
    
    ## 接着第三部分的代码
    tb_1 = PrettyTable([&#39;**号&#39;, &#39;**时间&#39;, &#39;当前状态&#39;, &#39;单号&#39;, &#39;机构&#39;])
    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)

    5. 印刷効果

    使用効果は次のとおりです: 注文番号を貼り付けて Enter キーを押すと、以下の必要な情報データ (テスト データ) が直接返されます。 :

    Python が Oracle に接続する際の問題を解決する方法

    問題記録

    最初の問題は、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 ファイルをインストールしてください問題を解決するには、もう一度コピーしてください。

    Python が Oracle に接続する際の問題を解決する方法

    最適化後

    • SQL ステートメントを構成ファイルに配置し、テーブル ヘッダーを構成して、複数のクエリを自由に拡張できるようにします。 。

    • ワンクリック クエリを真に実現するには、bat スクリプトを呼び出して実行します。

    以上がPython が Oracle に接続する際の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。