프로그래밍 언어/Python

[Python] MariaDB와 pymysql을 사용한 행 단위 csv 파일 저장하기

귀뚜래미 2022. 12. 19. 10:58
728x90

프롤로그

업무 중 구글링을 아무리 해봐도 DB 데이터를 행단위 csv 파일로 각각 저장하는 방법을 찾을 수 가 없어 직접 해결해본 끝에 작성하는 글... SQLite에 저장된 테이블 데이터를 MySQL로 가져와 Python으로 로그 시간별 행단위 csv 파일을 만들어 저장하는 과정입니다. 

 

  • Python, PyMySQL
  • DBMS : SQLite(DB Browser for SQLite)
  • DBMS : MariaDB(HeidiSQL)

 

1. SQLite의 테이블 데이터를 CSV로 내보내기

DB Browser for SQLite에서 csv로 뽑아내고자 하는 데이터이다.

 

파일 - 내보내기 - 테이블을 CSV 파일로 내보내기를 클릭한다.

 

내보내고자 하는 테이블을 선택 후 구분자와 개행문자를 지정 후 저장 버튼을 누른다.

 

내보내기가 완료되었다.

 

깔끔하게 csv 파일로 출력 되었다.

 

 

2. CSV 테이블 데이터를 MySQL로 가져오기

HeidiSQL에서 호스트명, 사용자, 암호, 포트를 통해 세션을 열어준다. 향후 파이썬 코드에 들어가는 부분이니 유의해야한다.

 

기존 테이블과 동일하게(데이터형, null여부) 테이블을 생성해준다.

 

도구 - CSV 파일 가져오기를 선택한다.

 

아까 내보내기된 csv 파일을 선택 후 구분자와 종결자를 선택, import 하고자 하는 데이터베이스와 테이블을 선택 후 가져오기를 선택한다.

 

깔끔하게 가져와진 모습이다.

 

3. Python - pymysql 설치하기

윈도우키 + R을 눌러 실행창이 열리면 cmd를 입력 후 프롬포트 창에 pip install pymysql을 입력해 설치를 진행한다.

설치가 완료되면 프롬포트 창에 python을 입력 후 import pymysql을 입력해 모듈 관련 오류가 발생하지 않는다면 정상적으로 설치과 완료된 것이다.

 

4. Python 코드 작성

import pymysql
from datetime import datetime

# 조건 1. 1행당 1csv 파일 export, csv 파일명을 log2022-12-05-11-45-20.csv 형식으로 export 해야함
# 조건 2. 컬럼명을 제외한 행 데이터만 출력해야함

savePath = 'D:\WorkSpace\\restoreCSV\\'
fileExtention = '.csv'  

# 시작시간 출력
print('DB to CSV Convert Start Time : ', str(datetime.now())[:19])

conn = pymysql.connect(host='DB주소', port=포트번호, user='user 이름', password='비밀번호', db='출력하고자 하는 DB', charset='utf8')
c = conn.cursor()
sql = 'SELECT * FROM 테이블명'
c.execute(sql)
rows = c.fetchall()

for x in rows:
	# 저장 경로와 얻고자 하는 파일명 지정
    savePath = 'D:\WorkSpace\\restoreCSV\\'
    fileExtention = '.csv'
    
    timeColumn = str(x[0]) # 예시 : 2022-12-05-11:45:20 오전
    value_Year = timeColumn[0:4] # 2022
    value_Month = timeColumn[5:7] # 12
    value_Day = timeColumn[8:10] # 05
    value_Hour = timeColumn[11:13] # 11
    value_Min = timeColumn[14:16] # 45
    value_Sec = timeColumn[17:19] # 20
    fileName = savePath + 'log' + value_Year + '-' + value_Month + '-' + value_Day + '-' + value_Hour + '-' + value_Min + '-' + value_Sec + fileExtention # D:\WorkSpace\restoreCSV\log2022-12-05-11-45-20.csv
        
    # 반복문을 통한 csv 파일 저장
    text = ''
    for y in x:
        y = str(y)
        text = text + y + ','    # 구분자 : ,    
    path = savePath + fileName + fileExtention    
    f = open(path, 'w')
    f.writelines(text[:-1]+'\n')
    f.close()      

c.close()
conn.close()

# 종료시간 출력
print('DB to CSV Convert End Time : ', str(datetime.now())[:19])

 

5. 코드 실행 후 결과 확인

코드 작성 후 실행 하면 DB에 접속 후 해당 경로로 지정한 파일명대로 한 행 씩 로그 파일을 저장하는 모습을 볼 수 있다.

DB to CSV Convert End Time :  2022-12-14 16:07:03
DB to CSV Convert End Time :  2022-12-14 16:07:58

 

총 43550행의 데이터를 csv 파일로 export하는데 약 1분의 시간이 소요되었다.

 

완벽하게 원하는대로 데이터가 저장되었다.

728x90