Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk menyelesaikan masalah Python menyambung ke Oracle
Bahasa pembangunan: Python, pangkalan data: oracle, perpustakaan pihak ketiga: cx_Oracle (untuk sambungan antara python dan oracle), prettytable (digunakan Paparkan data dalam output jadual)
pip install cx_Oracle
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
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) # ......
Pasang prettytable
<.>pip install PrettyTable
Contoh kod
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)5 Kesan pencetakanKesan penggunaan adalah seperti berikut: Tampal nombor pesanan dan tekan Enter untuk mengembalikan terus. data maklumat yang diperlukan di bawah ( Data ujian): Rekod masalahMasalah pertama ialah ralat semasa memasang cx_Oracle:
RALAT: Tidak dapat membina roda untuk cx_Oracle, yang diperlukan untuk memasang projek berasaskan pyproject.tomlPenyelesaian: 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 bantuanPenyelesaian: 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 disokongMuat 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. Pengoptimuman pasca
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!