>백엔드 개발 >파이썬 튜토리얼 >Python이 Oracle에 연결하는 문제를 해결하는 방법

Python이 Oracle에 연결하는 문제를 해결하는 방법

王林
王林앞으로
2023-04-25 10:07:062246검색

    기술 프레임워크

    개발 언어: Python, 데이터베이스: oracle, 타사 라이브러리: cx_Oracle(Python과 Oracle 간 연결용), Prettytable(테이블 형식 출력 표시 데이터용)

    개발 단계

    One , 설치 cx_Oracle

    pip install cx_Oracle

    2. 데이터베이스 연산 클래스 작성

    chatgpt에서 제공하는 코드를 직접 사용합니다. query 방식만 사용했기 때문에 추가, 삭제, 수정 없이 확인만 했습니다. 또한, 질의가 필요한 점을 고려하여 작성했습니다. 여러 데이터를 동시에 직접 수정하여 연결 풀 기능을 구현했습니다.

    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을 설치할 때 발생하는 오류입니다.

    ERROR: cx_Oracle용 휠을 만들 수 없습니다. pyproject.toml 기반 프로젝트를 설치하는 데 필요합니다

    해결 방법: Microsoft C++ Generation Tool, Microsoft C++ Generation Tool-Visual Studio를 설치하고 설치 디렉터리를 변경한 후 기본 옵션에 따라 설치합니다.

    오류 메시지

    cx_Oracle.Database오류: DPI-1047: 64비트 Oracle 클라이언트 라이브러리를 찾을 수 없습니다: "지정된 모듈을 찾을 수 없습니다". https://cx-oracle.readthedocs.io/en/을 참조하세요. 최신/user_guide/installation.html 도움말

    해결책: oracle 클라이언트 디렉터리에 있는 oci, oraocci11, oraociei11의 3개 DLL을 복사하고(클라이언트 다운로드는 질문 3 참조) Paython 디렉터리의 Lib/site에 붙여넣습니다. 패키지 폴더 아래에 있습니다.

    오류 메시지

    cx_Oracle.DatabaseError: DPI-1072: Oracle 클라이언트 라이브러리 버전이 지원되지 않습니다.

    oracle 클라이언트를 다운로드하고 압축을 풀고 설치하세요. 다운로드 주소: oracle.github.io/odpi/doc/installation 이 문제는 내 컴퓨터가 원래 버전 19.18로 설치되어 클라이언트 버전 11.2로 교체되었기 때문에 발생했습니다. 질문 2의 지침에 따라 세 개의 dll 파일을 설치하세요. . 문제를 해결하려면 다시 복사하세요.

    Python이 Oracle에 연결하는 문제를 해결하는 방법사후 최적화

      SQL 문을 구성 파일에 넣고 테이블 헤더를 구성하여 여러 쿼리를 자유롭게 확장할 수 있습니다.
    • Bat 스크립트를 통해 호출하고 실행하면 진정한 원클릭 쿼리가 실현됩니다.

    위 내용은 Python이 Oracle에 연결하는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제