[Python] Oracle DB 이용 Develop Tip

오라클 DB를 한참 많이 사용한 것이 90년대 하반기였던 것으로 기억합니다만,
아직도 많은 회사에서 오라클 DB를 이용하고 있습니다.
대표님들은 돈 많이 드는 오라클을 이용하는 것 보다 MariaDB 같은 것으로
이관도 생각하고 계시나 이를 개발 쪽에서는 쉽게 할 수 없는 경우가 많습니다.

암튼 파이썬을 잘 이용하면 정말 쉽게 DB 접근 작업을 할 수 있는데,
유독 오라클 만은 cx_Oracle 등이 설치부터 해서 제대로 환경을 갖추는데 쉽지 않았었습니다.

헌데 이번에 다시 찾아보니 cx_Oracle도 Pure Python 을 이용하는 것으로 변경된 거 같은
python-oracledb 라는 것으로 변경되었네요.

앗싸! 드디어 MySQL 드라이버 만큼이나 쉽게 사용할 수 있겠다 하고,

pip install oracledb

로 쉽게 설치를 하고 (아주 간단하게 두 세개의 모듈을 가볍게 설치되었습니다)
다음과 같은 샘플 python 코드를 만들어

import oracledb
import os

un = os.environ.get('PYTHON_USERNAME')
pw = os.environ.get('PYTHON_PASSWORD')
cs = os.environ.get('PYTHON_CONNECTSTRING')

with oracledb.connect(user=un, password=pw, dsn=cs) as connection:
    with connection.cursor() as cursor:
        sql = """select sysdate from dual"""
        for r in cursor.execute(sql):
            print(r)

oracledb.exceptions.NotSupportedError: DPY-3010: connections to this database server version are not supported by python-oracledb in thin mode

위와 같은 오류가 뜨는 것이었습니다. 헐! 안되나? 하고 찾아보았더니, 이 코드는 오라클 12.X 버전 이후이고 이전 버전에서는
Thick 모드로 사용하라는 것이었고 위에다 시작할 때 코드를 하나 추가하는데,

oracledb.init_oracle_client(...)
를 해야 한다는 것이었습니다.

약간의 시행착오 끝에 해결 방법을 찾았습니다.

오라클 Instant Client 에서 basic 패키지를 받습니다. 리눅스나 윈도우 등도 개별로 있으니 자신의 환경에 맞는 것을
받아 옵니다. 저는 우분투 22.04에서 테스트를 했으니 리눅스 버전을 받았습니다.

홈에 압축해지를 하면 instantclient_21_6 이라는 폴더에 공유 라이브러리 등이 풀리더군요.
위에 테스트 코드에서 import 다음에,

oracledb.init_oracle_client(lib_dir="/home/user/instantclient_21_6")
와 같이 추가하고,

실행하는데, 이번에는
oracledb.exceptions.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libnnz21.so: cannot open shared object file: No such file or directory". See https://oracledb.read
thedocs.io/en/latest/user_guide/installation.html for help                                                                                                                                    
와 같은 오류가 뜹니다.

뭐 LD_LIBRARY_PATH 문제인가 하고,

LD_LIBRARY_PATH=/home/user/instantclient_21_6 python ora-test.py
와 같이 호출을 했더니 정상적으로 동작을 했습니다.

환경변수에 LD_LIBRARY_PATH 를 넣고 바로 실행해도 되겠습니다.


어느 분께는 도움이 되셨기를 ..

덧글

댓글 입력 영역

구글애드텍스트