Spring/ETC

python 스크립트로 sql 쿼리를 이용해서 excel 다운로드

YoonJong 2025. 5. 28. 15:50
728x90
반응형

daily로 하던 업무를  python 을 이용하여 자동화를 진행했다.

 

단순한 업무였지만 자동화를 한번도 밑바닥부터 해본적이 없어서 자동화 작업을 경험할 겸 작성했다.

기본업무는 db 툴에서 sql 을 실행시켜서 excel 로 다운로드 받은 후, 지라 티켓에 업로드하는 일.

 

지라 티켓에 업로드는 직접 업로드해야하므로, 파일을 다운로드받는 폴더까지 자동화시키는 작업을 진행했다.

 

폴더위치는 원하는 곳에 진행하면 된다.

# 1. 원하는 폴더로 이동 (예: 바탕화면/new_report)
cd ~/Desktop
mkdir new_report
cd new_report

# 2.가상환경 생성
python3 -m venv venv

# 3.가상환경 활성화
source venv/bin/activate

# 4.pip로 필요한 패키지 설치
pip install pandas pymysql openpyxl

 

스크립트를 작성한다.

vi 는 너무 작성하기 불편해서 대중적으로 많이 사용하는 Sublime Text 를 편집기로 사용했다.

 

각 목적에 따라 수정해준다.

나는 전일 데이터를 추출해야하기에 어제 날짜를 계산해서 넣어준다.

이름 또한 같다.

from openpyxl import Workbook
from openpyxl.styles import PatternFill
import pymysql
from datetime import datetime, timedelta

write_wb = Workbook()
write_ws = write_wb.active

# "어제" 날짜 계산
yesterday = datetime.now() - timedelta(days=1)
date_str = yesterday.strftime('%Y-%m-%d')          # '2025-05-28'
month = yesterday.month
day = yesterday.day

# 저장 경로(원하면 절대경로로 수정)
file_name = f"{month}월{day}일-py.xlsx"

# 쿼리 날짜 범위 생성
start = f"{date_str} 00:00:00"
end = f"{date_str} 23:59:59"

conn = pymysql.connect(
    host='host주소',
    port=3306,
    user='username',
    password='password',
    db='db이름',
    charset="utf8"
)
curs = conn.cursor()

sql = f"""
SELECT ...
FROM ...
    WHERE ...
"""

curs.execute(sql)
rows = curs.fetchall()

# 한글 컬럼명 헤더 직접 지정
ws_title = "순번\t이름\t전화번호"
l_title = ws_title.split("\t")
write_ws.append(l_title)

# 헤더 셀 하늘색 채우기
fill = PatternFill(fill_type="solid", fgColor="B7E1FF")  # 연한 하늘색
for cell in write_ws[1]:  # 1행 전체
    cell.fill = fill

# 쿼리 결과 print로 출력
print("\n[쿼리 결과 출력]")
for row in rows:
    print(row)
    write_ws.append(row)

write_wb.save(file_name)
conn.close()

print(f"\n엑셀 저장 완료: {file_name}")
print(f"총 {len(rows)}건 추출")

 

cron 을 이용한 자동화 진행

매일 8시에 자동으로 실행시킬 예정이다.

0 8 * * * /usr/bin/python3 /path/to/your_script.py

 

 

참고한 블로그 : https://m.blog.naver.com/oralol/222140019035

그리고 GPT 

728x90
반응형