Almost-Native

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

Java 프로그램 개발, IT

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

2022. 6. 11. 18:08

파이썬(Python) 에서 Oracle Database 에 접속해서 조회(Select), 등록(Insert) 등의 작업을 하기 위해서는 Oracle DB 에 접속하기 위한 파이썬 라이브러리(DB접속 드라이버)가 필요합니다.

cx_Oracle 이라는 것인데, 이게 최근에는 python-oracledb 로 변경되었습니다.

2022년 현재 시점에는 어떤 것을 쓰던 비슷하고 둘다 잘 돌아갑니다.

하지만, 장기적으로 봤을때는 python-oracledb 라이브러리를 쓰는게 바람직합니다.

 

여기에서는 두가지 다 사용해서 설명해 보도록 하겠습니다.

 

cx_Oracle 을 사용하던 python-oracledb 를 사용하던, 먼저 이들을 사용하려면 라이브러리 설치가 필요합니다.

 

 

1) cx_Oracle 라이브러리 설치

 

저는 윈도우즈 PC에서 설치를 했는데, pip 툴을 이용해서 아래와 같이 간단하게 설치가 되었습니다.

 

 

2) python-oracledb 라이브러리 설치

 

python-oracledb 라이브러리는 pip 툴에서 설치할 때 이름은 oracledb 입니다.

pip install oracledb -upgrade 커맨드로 간단하게 설치가 됩니다.

 

 


 

아래는 cx_Oracle 라이브러리를 이용해서 간단하게 Oracle DB 에 접속해서 데이터를 등록(Insert) 하고, 조회(Select) 하는 샘플 예제 입니다.

 

 
import cx_Oracle
 
# create table TEST_TBL ( aa varchar2(100) );
 
 
#####################################################################################################
# DB 접속
#####################################################################################################
con = cx_Oracle.connect("scott""tiger""192.168.1.171:1521/ORA19", encoding="UTF-8")
cursor = con.cursor()
 
 
#####################################################################################################
# Insert (Write to DB)
#####################################################################################################
in_data = "Hello World~ 안녕 오라클-파이썬"
cursor.execute("insert into TEST_TBL (aa) values (:1)", [in_data])
con.commit()
 
 
#####################################################################################################
# Select (Read from DB)
#####################################################################################################
cursor.execute("select aa from TEST_TBL")
out_data = cursor.fetchone()
print("=====>", out_data[0])
 
con.close()
 
 

 

import cx_Oracle

 : cx_Oracle 라이브러리를 사용하기 위해서 Import 합니다.

 

# create table TEST_TBL ( aa varchar2(100) );

 : 미리 Oracle Db 에 TEST_TBL 테이블을 만들어 둡니다.  # 은 코맨트(주석) 입니다.^^

 

con = cx_Oracle.connect("scott", "tiger", "192.168.1.171:1521/ORA19", encoding="UTF-8")

 : Oracle DB 에 접속하기 위해서 DB User, Password 와 접속할 DB 의 IP, Port, Service명 등의 정보가 필요합니다.

   Port, 서비스명을 모르는 경우 아래와 같이 해당 DB 서버에서 lsnrctl status 커맨드로 확인할 수 있습니다.

 

 

cursor.execute("insert into TEST_TBL (aa) values (:1)", [in_data])

 : Insert SQL 구문을 실행합니다.  :1 위치에 in_data 변수에 있는 값을 넣어서 Insert 하라는 의미 입니다.

 

con.commit()

 : Oracle DB 에서는 DML 뒤에는 반드시 commit 을 해줍니다. Oracle DB 사용자들에게는 아주 익숙하지만, 타 DB 사용자들의 경우 기본 auto commit 모드로 동작하는 경우가 있어, commit 을 안해주는 경우도 있어 헷갈릴 수 있습니다.

Oracle DB 에서는 DML(Insert/Update/Delete) 구문 뒤에는 반드시 commit 해준다고 생각하면 되고,

Select 구문 뒤에는 하지 않습니다.

 

cursor.execute("select aa from TEST_TBL")
out_data = cursor.fetchone()

 : 조회(Select) SQL 구문도 Insert 와 마찬가지로 execute() 커맨드를 이용합니다.

이때 조회결과는 fetchone() 함수를 이용해서 받게됩니다.

 

print("=====>", out_data[0])

 : 조회된 결과를 화면에 출력합니다. fetchone() 함수로 리턴받으면 tuple 타입으로 받아져서, out_data[0] 과 같이 해줘야 제대로 출력됩니다.

 

 

실행결과는 아래와 같습니다.

 

Oracle DB 내에서 TEST_TBL 테이블을 조회해 보면 아래와 같습니다.

위에는 실행전에 조회한 것으로 조회되는 건이 없습니다. 아래는 실행후에 조회한 것으로 데이터가 들어가 있는것을 확인할 수 있습니다.

 


 

아래는 python-oracledb 라이브러리를 이용해서 작성된 같은 프로그램입니다.

거의 모든 구문이 같다고 보면 되고, import 할때 라이브러리명이 oracledb 인 점이 다릅니다.

 

 
import oracledb
 
# create table TEST_TBL ( aa varchar2(100) );
 
 
#####################################################################################################
# DB 접속
#####################################################################################################
con = oracledb.connect(user="scott", password="tiger", dsn="192.168.1.171:1521/ORA19")
cursor = con.cursor()
 
 
#####################################################################################################
# Insert (Write to DB)
#####################################################################################################
in_data = "Hello World~ 안녕 오라클-파이썬"
cursor.execute("insert into TEST_TBL (aa) values (:1)", [in_data])
con.commit()
 
 
#####################################################################################################
# Select (Read from DB)
#####################################################################################################
cursor.execute("select aa from TEST_TBL")
out_data = cursor.fetchone()
print("=====>", out_data[0])
 
con.close()
 
 

추가로, connect 하는 부분에서 미묘하게 차이가 납니다. encoding 부분이 없어졌고, user, password, dsn 키워드를 명시적으로 써주는 부분에서 차이가 납니다.

 

 

★★★ (( 추가 )) ★★★

 

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

 

파이썬에서 Oracle DB 로 BLOB 데이터 읽기/쓰기하는 샘플 예제 (cx_Oracle 라이브러리 이용)

 

 파이썬에서 Oracle DB 로 대용량 BLOB 데이터 읽기/쓰기하는 샘플 예제 (cx_Oracle 라이브러리 Streaming 방식)

 

파이썬에서 Oracle DB 로 BLOB 데이터 읽기/쓰기하는 샘플 예제 (oracledb 라이브러리 이용)

 

파이썬에서 Oracle DB 로 대용량 BLOB 데이터 읽기/쓰기하는 샘플 예제 (oracledb 라이브러리 Streaming 방식)

 

파이썬 프로그램에서 Oracle DB 로 DRCP(공유커넥션풀링) 적용 샘플

 

Comments