본문 바로가기

카테고리 없음

MySQL 쿼리 결과를 엑셀로 저장하는 자동화 스크립트 만들기

반응형

MySQL 쿼리 결과를 엑셀로 저장하는 자동화 스크립트 만들기

 

업무에서 자주 사용하는 MySQL 데이터를 수시로 엑셀로 추출해야 할 때, 매번 쿼리 실행 후 복사·붙여넣기하는 수작업은 번거롭고 실수가 생기기 쉽습니다. 파이썬의 pymysqlpandas, openpyxl 라이브러리를 활용하면, 쿼리 결과를 자동으로 엑셀 파일로 저장하는 스크립트를 손쉽게 만들 수 있습니다.

사용 기술 및 라이브러리

  • pymysql: 파이썬에서 MySQL 데이터베이스에 접속하고 쿼리를 실행하는 라이브러리
  • pandas: SQL 결과를 데이터프레임 형태로 다루기 위한 데이터 처리 라이브러리
  • openpyxl: 엑셀(.xlsx) 파일로 저장하기 위한 라이브러리

라이브러리 설치

pip install pymysql pandas openpyxl

예제: 회원 목록을 엑셀로 저장하는 스크립트

아래는 MySQL에 저장된 회원 정보를 조회하고, 그 결과를 'members.xlsx'라는 파일로 저장하는 전체 코드입니다.

import pymysql
import pandas as pd

# DB 연결 정보
db_config = {
    "host": "localhost",
    "user": "your_user",
    "password": "your_password",
    "database": "your_database",
    "charset": "utf8mb4"
}

# 실행할 쿼리
sql = "SELECT id, name, email, created_at FROM members"

# MySQL 연결 및 쿼리 실행
conn = pymysql.connect(**db_config)
df = pd.read_sql(sql, conn)
conn.close()

# 결과를 엑셀로 저장
df.to_excel("members.xlsx", index=False)

print("엑셀 파일 저장 완료: members.xlsx")

코드 설명

  • pymysql.connect: MySQL 서버에 연결
  • pd.read_sql(): SQL 결과를 데이터프레임으로 로드
  • df.to_excel(): 엑셀 파일(.xlsx)로 저장

실무 활용 팁

  • 복잡한 쿼리도 그대로 사용 가능 (JOIN, WHERE 등)
  • 날짜를 기준으로 파일명에 타임스탬프 추가 가능
  • 여러 테이블을 각각 시트로 저장하는 방식도 확장 가능
  • 스케줄러(cron, Task Scheduler)와 연동하여 자동 실행 가능

에러 방지를 위한 체크 포인트

  • MySQL 서버와 연결 시 포트, 계정, 비밀번호 정확히 확인
  • 테이블에 한글이 포함되어 있다면 charset='utf8mb4' 사용
  • 엑셀 저장 시 파일이 열려 있다면 덮어쓰기가 실패하므로 주의

엑셀 포맷 꾸미기(선택 사항)

openpyxl을 이용하면 엑셀 시트의 셀 서식, 컬럼 너비 조정, 헤더 색상 적용도 가능합니다. 아래는 예시 코드입니다.

from openpyxl import load_workbook
from openpyxl.styles import Font

wb = load_workbook("members.xlsx")
ws = wb.active

# 헤더 굵게 표시
for cell in ws[1]:
    cell.font = Font(bold=True)

wb.save("members.xlsx")

마무리하며

파이썬과 pymysql, pandas, openpyxl을 활용하면 MySQL 쿼리 결과를 엑셀로 자동 저장하는 시스템을 손쉽게 구현할 수 있습니다. 반복적인 작업을 자동화함으로써 시간과 실수를 줄이고, 업무 효율을 크게 향상시킬 수 있습니다.

실제 프로젝트에 맞게 쿼리를 수정하고, 날짜별 자동 저장이나 이메일 자동 전송 기능까지 연계하면 훨씬 더 강력한 자동화 시스템을 구축할 수 있습니다.

반응형