Maison >développement back-end >Tutoriel Python >Comment résoudre le problème de connexion de Python à Oracle
Langage de développement : Python, base de données : oracle, bibliothèque tierce : cx_Oracle (pour la connexion entre python et oracle), Prettytable (pour les données d'affichage de sortie tabulaire)
pip install cx_Oracle
Utilisez directement le code fourni par chatgpt, car je n'ai utilisé que la méthode de requête, j'ai donc vérifié uniquement sans ajouts, suppressions et modifications. De plus, étant donné que je dois interroger. plusieurs données en même temps, je l'ai modifié moi-même. Implémentation d'une fonction de pool de connexions.
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) # ......
Installez Prettytable
pip install PrettyTable
Exemple de code
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)
Enregistrement du problème
Solution : installez Microsoft C++ Generation Tool, Microsoft C++ Generation Tool-Visual Studio, modifiez le répertoire d'installation et installez selon les options par défaut.
Message d'erreur
cx_Oracle.DatabaseError : DPI-1047 : Impossible de localiser une bibliothèque client Oracle 64 bits : "Le module spécifié est introuvable".Voir https://cx-oracle.readthedocs.io/en/ last/user_guide/installation.html pour obtenir de l'aideSolution : Copiez les 3 DLL de oci, oraocci11, oraociei11 dans le répertoire du client oracle (voir question 3 pour le téléchargement du client) et collez-les dans le Lib/site de votre répertoire Paython- sous le dossier packages.
Message d'erreur
cx_Oracle.DatabaseError : DPI-1072 : la version de la bibliothèque client Oracle n'est pas prise en chargeTéléchargez le client Oracle, décompressez-le et installez-le. Adresse de téléchargement : oracle.github.io/odpi/doc/installation Ce problème m'est survenu car ma machine était initialement installée avec la version 19.18 et l'a remplacée par la version 11.2 du client. Suivez les instructions de la question 2 pour installer les trois fichiers dll. . Copiez-le à nouveau pour résoudre le problème.
Post-Optimisation
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!