반응형
업무에서 자주 사용하는 MySQL 데이터를 수시로 엑셀로 추출해야 할 때, 매번 쿼리 실행 후 복사·붙여넣기하는 수작업은 번거롭고 실수가 생기기 쉽습니다. 파이썬의 pymysql과 pandas, 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 쿼리 결과를 엑셀로 자동 저장하는 시스템을 손쉽게 구현할 수 있습니다. 반복적인 작업을 자동화함으로써 시간과 실수를 줄이고, 업무 효율을 크게 향상시킬 수 있습니다.
실제 프로젝트에 맞게 쿼리를 수정하고, 날짜별 자동 저장이나 이메일 자동 전송 기능까지 연계하면 훨씬 더 강력한 자동화 시스템을 구축할 수 있습니다.
반응형