Almost-Native

파이썬 Oracle DB 연결 라이브러리 비교 (cx_Oracle, Thin oracledb, Thick oracledb) 본문

Java 프로그램 개발, IT

파이썬 Oracle DB 연결 라이브러리 비교 (cx_Oracle, Thin oracledb, Thick oracledb)

2022. 6. 11. 23:17

Python 프로그램에서 Oracle Database 에 접속해서 DB 작업을 할 수 있도록 도와주는 라이브러리에 cx_Oracle python-oracledb 가 있습니다.

서로 다른 것은 아니고, 원래 있던 cx_Oracle 이 버전업을 하면서 이름을 python-oracledb 라고 바꾼것입니다.

즉, 라이브러리명이 바뀌면서 기능이 좀 추가된 형태라고 보면 됩니다.

 

따라서, 라이브러리에서 제공하는 함수들의 이름이나 기본적인 사용방법은 거의 그대로이거나 약간씩 다른 부분이 있는 정도 입니다.

 

python-oracledb 로 가면서 가장 크게 바뀐 부분은 "thin 모드""thick 모드"가 생겼다는 점 입니다.

thin 모드 / thick 모드 의 차이는 Oracle Client 를 사용하느냐 아니냐의 차이입니다.

 

cx_Oracle 라이브러리를 사용하는 경우, 반드시 Oracle Client Library 가 있어야 했습니다. 즉, cx_Oracle 을 사용하는 파이썬 프로그램이 돌아가는 서버에 Oracle Client 가 설치되어 있어야 합니다.

 

cx_Oracle 구조 (출처: https://cx-oracle.readthedocs.io)

 

하지만, python-oracle 라이브러리를 사용하는 경우에는 Oracle Client 가 없어도 되고, 이게 thin mode 입니다.

 

Thick oracledb 구조 (출처: https://python-oracledb.readthedocs.io)

 

Thin oracledb 구조 (출처: https://python-oracledb.readthedocs.io)

 

Oracle Client 를 따로 설치하지 않아도 되기 때문에 엄청 편해 보일수 있긴 하지만, 이로 인한 제약사항도 있습니다.

 

DB Startup/Stop, TAF기능사용, BFILE Type 지원, 21c JSON Data Type 지원, 2PC 등의 기능을 Thin 모드에서는 사용할 수 없습니다.

자세한 제약사항은 여길 참조하세요.  (https://python-oracledb.readthedocs.io/en/latest/user_guide/appendix_a.html#)

 

 

# cx_Oracle 라이브러리 connect 샘플
import cx_Oracle
con = cx_Oracle.connect("scott""tiger""192.168.1.171:1521/ORA19", encoding="UTF-8")
 

 

# python-oracledb 라이브러리 connect 샘플
import oracledb
oracledb.init_oracle_client(lib_dir=r"C:\instantclient_19_14")
con = oracledb.connect(user="scott", password="tiger", dsn="192.168.1.171:1521/ORA19")
 

 

위 python-oracledb 라이브러리 샘플에서 oracledb.init_oracle_client() 부분이 들어가면 thick 모드로 동작하게 되고, 이 부분이 없으면 thin 모드로 동작합니다.

lib_dir=r"C:\instantclient_19_14"  에서  r 은 윈도우즈 디렉토리 표현방식(\)을 위한 것입니다.

리눅스에서는 lib_dir="/home/instantclient_19_14" 와 같이  r 문자 없이 사용합니다.

라이브러리 디렉토리를 잘못 지정해서 제대로 찾지 못하는 경우에는 그냥 공백으로 놔두면 알아서 찾습니다.

oracledb.init_oracle_client()

 

 

(( 참고 )) 파이썬에서 Oracle DB 접속하여 데이터 읽기/쓰기하는 방법 설명 및 샘플예제

 

Comments