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
'Python > Script' 카테고리의 다른 글
오라클 19c 파이썬을 이용해 여러개 DB 데이터 조회 후 엑셀 파일로 저장(pandas) (0) | 2024.04.04 |
---|---|
오라클 19c 파이썬을 이용해 여러개 DB 데이터 조회 후 엑셀 파일로 저장 (0) | 2024.04.01 |
오라클 19c 파이썬을 이용해 데이터 조회 후 엑셀 파일로 저장 (2) | 2024.04.01 |