프린트 하기

OS 환경 : Oracle Linux 7.6 (64bit)

 

SW 환경 : VS Code 1.87.2, Python 3.12.2

 

DB 환경 : Oracle Database 19.3.0.0

 

방법 : 오라클 19c 파이썬을 이용해 접속 및 쿼리

파이썬환경에서 오라클에 접속하기 위해선 먼저 python-oracledb 모듈이 필요함(구 cx-oracle 모듈)
이 모듈은 Python 프로그램이 Oracle Database 에 연결할 수 있게 해주는 Python 프로그래밍 언어 확장 모듈임

 

 

본문에서는 이 모듈을 이용해 oracle에 접속하고 쿼리를 실행해서 결과값을 받는 방법을 설명함

 

 

사전 설정 :
- VS Code 다운로드 : Windows 10에 Visual Studio Code 설치 가이드( https://positivemh.tistory.com/1058 )
- Python 다운로드 : Windows 10에 Python 설치 가이드( https://positivemh.tistory.com/1059 )
- VS Code 인터프리터 설정 : 인터프리터 설정( https://positivemh.tistory.com/1060 )

 

 

python-oracledb 모듈 설치

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CMD> pip install oracledb --upgrade
Collecting oracledb
  Downloading oracledb-2.1.1-cp311-cp311-win_amd64.whl.metadata (5.3 kB)
Collecting cryptography>=3.2.1 (from oracledb)
  Downloading cryptography-42.0.5-cp39-abi3-win_amd64.whl.metadata (5.4 kB)
Collecting cffi>=1.12 (from cryptography>=3.2.1->oracledb)
  Downloading cffi-1.16.0-cp311-cp311-win_amd64.whl.metadata (1.5 kB)
Collecting pycparser (from cffi>=1.12->cryptography>=3.2.1->oracledb)
  Downloading pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
Downloading oracledb-2.1.1-cp311-cp311-win_amd64.whl (1.6 MB)
   ---------------------------------------- 1.6/1.6 MB 9.5 MB/s eta 0:00:00
Downloading cryptography-42.0.5-cp39-abi3-win_amd64.whl (2.9 MB)
   ---------------------------------------- 2.9/2.9 MB 23.0 MB/s eta 0:00:00
Downloading cffi-1.16.0-cp311-cp311-win_amd64.whl (181 kB)
   ---------------------------------------- 181.5/181.5 kB 10.7 MB/s eta 0:00:00
Downloading pycparser-2.22-py3-none-any.whl (117 kB)
   ---------------------------------------- 117.6/117.6 kB 3.5 MB/s eta 0:00:00
Installing collected packages: pycparser, cffi, cryptography, oracledb
Successfully installed cffi-1.16.0 cryptography-42.0.5 oracledb-2.1.1 pycparser-2.22

 

 

conn.py 작성 후 실행(나의 경우 vs code 에서 실행함)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#import getpass
import oracledb
 
un = 'system'
cs = '192.168.137.19/oracle19'
port = 1521
pw = 'oracle'
#pw = getpass.getpass(f'Enter password for {un}@{cs}: ')
 
with oracledb.connect(user=un, password=pw, dsn=cs, port=port) as connection:
    with connection.cursor() as cursor:
        sql = """select to_char(sysdate, 'yyyymmdd hh24:mi:ss'), instance_name, version from v$instance"""
        for r in cursor.execute(sql):
            print(r)
    #connection.close()

참고로 getpass 를 사용하면 패스워드를 노출시키지 않을 수 있음
그리고 with문을 사용해 커서(cursor)나 connection을 열었다면 connection.close나 cursor.close 등의 명령이 필요하지 않음(자동으로 닫힘)
이 경우 cursor.close()를 사용하면 에러가 발생하지만
connection.close()를 사용할땐 에러가 발생하지 않음(이 명령으로 명시적으로 connection을 닫아줄 수 있음)

 

 

결과

1
('20240331 14:22:22', 'oracle19', '19.0.0.0.0')

정상적으로 sysdate가 출력됨

 

 

참조 : 

https://wikidocs.net/123504
https://oracle.github.io/python-oracledb/
https://cx-oracle.readthedocs.io/en/latest/user_guide/introduction.html
https://emilkwak.github.io/with-statement