프린트 하기

OS 환경 : Oracle Linux 7.6 (64bit)

 

SW 환경 : VS Code 1.87.2, Python 3.12.2

 

DB 환경 : Oracle Database 19.3.0.0

 

방법 : 오라클 19c 파이썬을 이용해 여러개 DB 데이터 조회 후 엑셀 파일로 저장

파이썬환경에서 여러대의 오라클 DB에 접속해서 데이터를 가져온 뒤 하나의 엑셀로 저장하는 방법을 설명함

사전 설정 참조 :오라클 19c 파이썬을 이용해 데이터 조회 후 엑셀 파일로 저장( https://positivemh.tistory.com/1065 )

 

 

multi_ora_to_xls.py 파일 생성 후 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
multi_ora_to_xls.py
import oracledb
import xlsxwriter
import datetime
 
# DB Connection Info
db_connections = [
    {'un''system''pw''oracle''cs''192.168.137.20/oracle19''port'1521},
    {'un''system''pw''oracle''cs''192.168.137.19/oracle19''port'1521}
]
 
Set Output Filename
current_time = datetime.datetime.now()
formatted_time = current_time.strftime("%Y%m%d_%H%M")
output_filename = f'C:/tmp/output_{formatted_time}.xlsx'
 
Create Excel
workbook = xlsxwriter.Workbook(output_filename)
worksheet = workbook.add_worksheet()
 
# Extract Data
row_index = 0
for db_info in db_connections:
    un = db_info['un']
    pw = db_info['pw']
    cs = db_info['cs']
    port = db_info['port']
 
    with oracledb.connect(user=un, password=pw, dsn=cs, port=port) as connection:
        with connection.cursor() as cursor:
            sql = "SELECT * FROM v$instance"
            cursor.execute(sql)
 
            # Add Column Name(One Column name)
            if row_index == 0:
                columns = [i[0] for i in cursor.description]
                for col, column_name in enumerate(columns):
                    worksheet.write(row_index, col, column_name)
                row_index += 1
                
            # # Add Column Name(Multi Column Name)
            # columns = [i[0] for i in cursor.description]
            # for col, column_name in enumerate(columns):
            #     worksheet.write(row_index, col, column_name)
            # row_index += 1
            
            for row in cursor:
                for col, value in enumerate(row):
                    worksheet.write(row_index, col, value)
                row_index += 1
 
# Close and Save Excel
workbook.close()
 
print(f"Excel file '{output_filename}' has been created successfully.")
 
결과
Excel file 'C:/tmp/output_20240401_2114.xlsx' has been created successfully.

 

 

엑셀 파일 확인

결과값이 하나의 파일에 저장됨

그리고 컬럼이름은 한번만 나옴

 

 

위 스크립트에서 Add Column Name(Multi Column Name) 부분을 주석해제하고 Add Column Name(One Column name) 부분을 주석처리한 뒤 실행하면 컬럼이 DB 갯수만큼 여러번 반복되어 출력됨

 

 

multi_ora_to_xls.py 파일 주석 변경 후 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
multi_ora_to_xls.py
(생략)
            # Add Column Name(One Column name)
            #if row_index == 0:
            #    columns = [i[0] for i in cursor.description]
            #    for col, column_name in enumerate(columns):
            #        worksheet.write(row_index, col, column_name)
            #    row_index += 1
                
             # Add Column Name(Multi Column Name)
             columns = [i[0] for i in cursor.description]
             for col, column_name in enumerate(columns):
                 worksheet.write(row_index, col, column_name)
             row_index += 1
(생략)
 
결과
Excel file 'C:/tmp/output_20240401_2126.xlsx' has been created successfully.

 

 

엑셀 파일 확인

컬럼이 반복되어 출력됨

 

 

참조 : 

https://positivemh.tistory.com/1065

 

오라클 19c 파이썬을 이용해 데이터 조회 후 엑셀 파일로 저장

OS 환경 : Oracle Linux 7.6 (64bit) SW 환경 : VS Code 1.87.2, Python 3.12.2 DB 환경 : Oracle Database 19.3.0.0 방법 : 오라클 19c 파이썬을 이용해 데이터 조회 후 엑셀 파일로 저장 파이썬환경에서 오라클에 접속해서

positivemh.tistory.com