Maison > développement back-end > Tutoriel Python > Comment résoudre le problème de connexion de Python à Oracle

Comment résoudre le problème de connexion de Python à Oracle

王林
Libérer: 2023-04-25 10:07:06
avant
2238 Les gens l'ont consulté

    Cadre technique

    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)

    Étapes de développement

    Une, installer cx_Oracle

    pip install cx_Oracle
    Copier après la connexion

    2. Écrivez la classe d'opération de base de données

    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
    Copier après la connexion

    3. Entrez le numéro de commande et exécutez la requête

    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)
    	# ......
    Copier après la connexion

    4. Impression formatée

    Installez Prettytable

    pip install PrettyTable
    Copier après la connexion

    Exemple de code

    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)
    Copier après la connexion

    5. le numéro de commande et appuyez sur Entrée, renvoie directement les informations requises suivantes (données de test) :

    Comment résoudre le problème de connexion de Python à OracleEnregistrement du problème

    Le premier problème est une erreur lors de l'installation de cx_Oracle :

    ERREUR : Impossible de construire des roues pour cx_Oracle, qui est requis pour installer des projets basés sur pyproject.toml

    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'aide

    Solution : 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 charge

    Té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.

    Comment résoudre le problème de connexion de Python à OraclePost-Optimisation

      Placez les instructions SQL dans le fichier de configuration et configurez l'en-tête du tableau pour obtenir une expansion libre de plusieurs requêtes.
    • Appelez et exécutez via un script bat pour réellement réaliser une requête en un clic.

    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal