윈도우 환경에서 파이썬으로 오라클 DB 사용하려고 하니 다른 DB 들과는 달리 연결 설정이 그렇게 쉽지는 않군요.
cx_oracle 을 보통 사용하는 듯 해서 우선 설치.
pip install cx_oracle
cx_oracle 8.0.0 이 별 문제없이 설치 되었다. 문제는 그 다음부터.
cx_oracle 패키지를 소스에서 찾지 못하고 엉뚱한 sqlalchemy.dialects 에 있는 cx_oracle 패키지만 찾거나, 'DPI-1047: Cannot locate a 64-bit Oracle Client library' 에러만 내놓는다.
늘 그렇듯이 문제 생긴 후 매뉴얼 정독.
cx_oracle 사용하려면 오라클 클라이언트 라이브러리를 별도로 설치해주어야 하는 듯.
Basic Light Package 최신 버전(글 쓰는 시점에서 v19.6) 내려 받은 후 ORACLE_HOME 설정.
setX ORACLE_HOME=oracle_client_dir
소스에서 import cx_oracle 에러는 사라졌지만 실행시켜보면 여전히 다음 에러가 난다.
'DPI-1047: Cannot locate a 64-bit Oracle Client library'
아래 처럼 소스에서 lib_dir 을 직접 지정해주거나 윈도우 환경 변수 'PATH'에 oracle_client_dir 를 추가해준다(리눅스 계열이면 'LD_LIBRARY_PATH'에 경로 추가).
cx_Oracle.init_oracle_client(lib_dir=r"oracle_client_dir")
위 구문 소스에 추가해준 뒤 다시 실행. 하지만 이번에도 역시나 에러.
cx_oracle dpi-1072 version is unsupported windows
사용하려는 오라클 DB 버전을 확인해봤다.
select * from v$version;
=> Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
오라클 클라이언트 라이브러리 페이지에서 DB 버전 지원 내용 일일이 확인하기 귀찮아서 그냥 전 버전(v18.5) 받아서 'lib_dir'만 변경한 후 실행해보았다. 이제사 성공.
DB service name 사용하려면 makedsn 사용해야 한다길래 사용해 본 방식(그런데 그냥 일반적인 connection 스트링 패턴 사용해도 저는 되긴 하더군요)
def __create_engine_ora(self):
cx_Oracle.init_oracle_client(lib_dir=r"C:\dev\instantclient_18_5")
oracle_connection_string = (
'oracle+cx_oracle://{username}:{password}@' +
cx_Oracle.makedsn('{hostname}', '{port}', service_name='{service_name}')
)
engine = create_engine(
oracle_connection_string.format(
username='...',
password='...',
hostname='*.*.*.*',
port='1521',
service_name='...',
)
)
return engine
'Lang' 카테고리의 다른 글
[python]pandas, mongoDB, odo 간단한 테스트 (2) | 2020.08.21 |
---|---|
Armeria, gRPC, JPA 간단한 샘플 (2) | 2020.08.19 |
[Python]두 DB 간 테이블 동기화 코딩 (0) | 2020.07.21 |
[Java]여러 DB 환경에서 native query 쓸 때 orm.xml 문제 (0) | 2020.07.15 |
[Python] 야구 게임 - 숫자 맞추기 (0) | 2020.07.11 |