Python Oracle Connect (Oracle Client) [MAC]

2DH·2023년 7월 28일
0

프로젝트 중 Python 으로 Oracle 에 접근하여 데이터를 가지고 오는 작업을 수행할 일이 생겨 Mac에서 접근할 수 있는 방법을 정리해보았습니다.
환경 : Mac OS
DB : Oracle
사용언어 : Python

1. Oracle Client Download


Version 19.8.0.0.0

Instant Client for macOS (Intel x86)

  • DMG 파일 다운로드

  • 다운로드 된 파일을 더블 클릭하고 삽입되도록 한 후 아래 내용을 수행
cd /Volumes/instantclient-basic-macos.x64-19.8.0.0.0dbru
./install_ic.sh
# downlaod 폴더에 다운로드가 됨.

/Users/dave/Downloads/instantclient_19_8
Creating dir: /Users/dave/Downloads/instantclient_19_8...
Copying /Volumes/instantclient-basic-macos.x64-19.8.0.0.0dbru files ...

2. Oracle Folder 정리

2.1 폴더 생성

  • 다운로드 받은 내용을 다 instanceclient_19_8 로 복사
  • 위에서 설치된 폴더 중 Network 폴더를 제외하고 아래 Oralce Client 폴더로 복사( /Users/dave/Oracle/instantclient_19_8)
mkdir -p /Users/dave/Oracle/instantclient_19_8/lib

# 위에서 설치한 내용을 위 /Users/dave/Oracle/instantclient_19_8/ 로 복사하기

# 심볼릭 링크 생성
ln -s /Users/dave/Oracle/instantclient_19_8/libclntsh.dylib /Users/dave/Oracle/instantclient_19_8/lib/

2.2 환경 변수

sudo vi ~/.zshrc

export ORACLE_HOME=/Users/dave/Oracle/instantclient_19_8
export DYLD_LIBRARY_PATH=/Users/dave/Oracle/instantclient_19_8
export OCI_LIB_DIR=/Users/dave/Oracle/instantclient_19_8
export OCI_INC_DIR=/Users/dave/Oracle/instantclient/sdk/include
export PATH=$PATH:$ORACLE_HOME

source ~/.zshrc

3. cx_Oracle 설치

pip install cx_Oracle
python -m pip install cx_Oracle --upgrade

4. Python 연결

4.1 cx_Oracle 로 direct 연결

import cx_Oracle
#cx_Oracle.init_oracle_client(lib_dir='/Users/dave/Oracle/instantclient_19_8')

host = ""
port = ""
db_name = ""
user_name = ""
password = ""

dsn_tns = cx_Oracle.makedsn(host, port, service_name=db_name)
conn = cx_Oracle.connect(user=user_name, password=password, dsn=dsn_tns, encoding='UTF-8')

sql_query = """
SELECT  
  * FROM TABLE WHERE between from_date and to_date
"""

sql_query_formatted = sql_query.format(from_date='20230412', to_date='20230412')

c = conn.cursor()
c.execute(sql_query_formatted)
print(c.fetchall())

c.close()
conn.close()

4.2 Pandas DataFrame으로 연결

host = ""
port = ""
db_name = ""
user_name = ""
password = ""

dsn_tns = cx_Oracle.makedsn(host, port, service_name=db_name)
conn = cx_Oracle.connect(user=user_name, password=password, dsn=dsn_tns, encoding='UTF-8')

c = conn.cursor()
#c.execute("SELECT * FROM Table")
c.execute("SELECT COLUMN_NAME FROM all_tab_columns WHERE table_name = 'TableName1' ORDER BY COLUMN_ID")
col_data = c.fetchall()
column_list = [col[0] for col in col_data]

c.execute("SELECT * FROM Table WHERE SUBSTR(HG1DDT,1,4) >= '2017'")
data_list = c.fetchall()

df = pd.DataFrame(data_list, columns = column_list)
df = df.fillna('')
c.close()
conn.close()

참조

https://somjang.tistory.com/entry/Python-sqlalchemy-cxOracle-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-Oracle-DB-%EC%97%B0%EA%B2%B0-%EC%8B%9C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-sqlalchemyexcDatabaseError-cxOracleDatabaseError-DPI-1047-Cannot-locate-a-64-bit-Oracle-Client-library-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95

profile
Becoming the Data Engineer

0개의 댓글