파이썬 모듈: Oracle 테이블의 컬럼 정보를 csv 파일에 저장하기

”’
Created on 2011. 8. 20.

@author: “Hur, Suhkjin”
”’

import csv
import cx_Oracle

connection = cx_Oracle.connect(“user”, “pass”, “XXX.XXX.XXX.XXX:1521/ORCL”)
cursor = connection.cursor()

# list of tables
sql = “select * from tab”
cursor.execute(sql)

tab_names = []
for row_data in cursor:
    tab_names.append(row_data[0])

# ‘w’ -> extra carriage returns
outputFile = open(‘acc_tables.csv’,’wb’)
output = csv.writer(outputFile, dialect=’excel’)
          
for tab_name in tab_names:
    if tab_name.startswith(‘ACC’): # filter the table names
       
        cursor.execute(“””
        select T.COLUMN_ID, C.COLUMN_NAME, C.COMMENTS, T.DATA_TYPE,
        T.DATA_LENGTH, T.NULLABLE, T.DATA_DEFAULT
        from USER_TAB_COLUMNS T, USER_COL_COMMENTS C
        where T.TABLE_NAME = ‘””” + tab_name + “””‘
        and C.TABLE_NAME = T.TABLE_NAME
        and T.COLUMN_NAME = C.COLUMN_NAME
        ORDER BY COLUMN_ID”””)
       
        # table name
        output.writerow([tab_name])
       
        # column descriptions
        cols = []
        for col in cursor.description:
            cols.append(col[0])
        output.writerow(cols)
       
        # one row at a time
        for row_data in cursor:
            output.writerow(row_data)
        output.writerow(‘\n’)

outputFile.close()
       
cursor.close()
connection.close()

################################################################################

  1. 설명
    • cx_Oracle이라는 파이썬 모듈 사용
    • “user”, “pass”, “XXX.XXX.XXX.XXX:1521/ORCL”는 오라클 서버 접속 정보
    • 이 예에서는 테이블명이 ACC로 시작하는 테이블만 처리
    • 이 예에서는 acc_tables.csv에 결과 저장
    • output.writerow([tab_name])에서 tab_name 대신 [tab_name]을 사용한 이유는 writerow가 String 하나를 받으면 그 String을 이루고 있는 문자들을 한 개의 셀에 하나씩 저장하기 때문
  2. 결과: acc_tables.csv파일에 다음과 같은 내용이 각 테이블에 대해 저장된다.
ACC_XXX
COLUMN_ID COLUMN_NAME COMMENTS DATA_TYPE DATA_LENGTH NULLABLE DATA_DEFAULT
1 DT 기준일 CHAR 8 N
2 ACCOUNT_UUID 계좌 UUID VARCHAR2 36 N
3 PAR_VAL 액면 가격 NUMBER 22 N


Leave a comment