Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk menyelesaikan masalah Python menyambung ke Oracle

Bagaimana untuk menyelesaikan masalah Python menyambung ke Oracle

王林
Lepaskan: 2023-04-25 10:07:06
ke hadapan
2251 orang telah melayarinya

    Rangka kerja teknikal

    Bahasa pembangunan: Python, pangkalan data: oracle, perpustakaan pihak ketiga: cx_Oracle (untuk sambungan antara python dan oracle), prettytable (digunakan Paparkan data dalam output jadual)

    Langkah pembangunan

    1. Pasang cx_Oracle

    pip install cx_Oracle
    Salin selepas log masuk

    2. Tulis kelas operasi pangkalan data

    Gunakan chatgpt terus Yang disediakan kod, kerana saya hanya menggunakan kaedah pertanyaan, hanya menyemak penambahan, pemadaman dan pengubahsuaian Selain itu, memandangkan saya perlu menanyakan berbilang data pada masa yang sama, saya mengubah suainya sendiri untuk melaksanakan fungsi kumpulan sambungan.

    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
    Salin selepas log masuk

    3. Masukkan nombor pesanan dan laksanakan pertanyaan

    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)
    	# ......
    Salin selepas log masuk

    4. Format pencetakan

    Pasang prettytable

    <. 🎜 >
    pip install PrettyTable
    Salin selepas log masuk

    Contoh kod

    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)
    Salin selepas log masuk
    5 Kesan pencetakan

    Kesan penggunaan adalah seperti berikut: Tampal nombor pesanan dan tekan Enter untuk mengembalikan terus. data maklumat yang diperlukan di bawah ( Data ujian):

    Bagaimana untuk menyelesaikan masalah Python menyambung ke Oracle

    Rekod masalah

    Masalah pertama ialah ralat semasa memasang cx_Oracle:

    RALAT: Tidak dapat membina roda untuk cx_Oracle, yang diperlukan untuk memasang projek berasaskan pyproject.toml

    Penyelesaian: Pasang Alat Binaan Microsoft C++, Alat Binaan Microsoft C++ - Visual Studio, tukar direktori pemasangan , dan ikut pilihan lalai Pasang sahaja.

    Mesej ralat

    cx_Oracle.DatabaseError: DPI-1047: Tidak dapat mencari pustaka Pelanggan Oracle 64-bit: "Modul yang dinyatakan tidak dapat ditemui".Lihat https:// cx-oracle.readthedocs.io/en/latest/user_guide/installation.html untuk mendapatkan bantuan

    Penyelesaian: Salin oci, oraocci11 dalam direktori klien oracle (lihat soalan 3 untuk muat turun klien), Tampalkan tiga DLL oraociei11 ke dalam folder Lib/pakej tapak direktori Paython anda.

    Mesej ralat

    cx_Oracle.DatabaseError: DPI-1072: versi perpustakaan Oracle Client tidak disokong

    Muat turun klien oracle, nyahzip dan pasangkannya . Alamat muat turun: oracle.github.io/odpi/doc/installation Masalah ini berlaku kepada saya kerana mesin saya pada asalnya dipasang dengan versi 19.18 dan menggantikannya dengan versi 11.2 klien Ikut arahan dalam soalan 2 untuk memasang tiga fail dll . Salin sekali lagi untuk menyelesaikan masalah.

    Bagaimana untuk menyelesaikan masalah Python menyambung ke Oracle

    Pengoptimuman pasca

    • Letakkan pernyataan sql ke dalam fail konfigurasi dan konfigurasikan pengepala jadual untuk mencapai pengembangan percuma berbilang pertanyaan .

    • Panggil dan laksanakan melalui skrip kelawar, benar-benar merealisasikan pertanyaan satu klik.

    Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah Python menyambung ke Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan