”’
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()
################################################################################
- 설명
- 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을 이루고 있는 문자들을 한 개의 셀에 하나씩 저장하기 때문
- 결과: 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 |