728x90
목표
프로그램이 잘 수행됐는지 확인하기 위해 "특정 시간"에 "조회 쿼리"를 수행하고 "결과를 공유"하는 프로그램을 만들려고 합니다. 우선은 원하는 프로그램이 가능할 지 검토하기 위해 생각나는 대로 개발을 해봅니다.
스펙
Python 3.7
Microsoft SQL Server Express 2018?
설계
동작 방식 : jobs 폴더의 파일을 읽어서 처리합니다.
쿼리 수행 결과를 pandas dataframe으로 읽어서 이미지로 저장한 후 이메일 발송합니다.
개발
PyCharm에서 개발합니다. 프로젝트명을 Query-Report로 만들었습니다.
jobs 폴더를 만들고 파일을 읽습니다.
for filename in os.listdir('./jobs'):
with open(os.path.join('./jobs/', filename), 'r', encoding='utf-8') as f:
query = f.read()
읽은 파일을 그대로 조회 쿼리로 사용합니다.
df = pandas.read_sql(sql=query, con=conn)
dataframe을 이미지로 저장합니다.
dataframe_image.export(df, image_path, max_cols=-1, max_rows=-1)
설정해서 메일로 발송합니다.
msg = EmailMessage()
msg['Subject'] = subject
msg['From'] = ''
msg['To'] = ''
msg.set_content('[image: {title}]'.format(title=subject))
cid = make_msgid()[1:-1]
msg.add_alternative(
content +
'<img src="cid:{cid}" alt="{alt}"/>'
.format(cid=cid, alt=html.escape(subject, quote=True)), subtype='html')
maintype, subtype = mimetypes.guess_type(str(path))[0].split('/', 1)
msg.get_payload()[1].add_related(
path.read_bytes(), maintype, subtype, cid="<{cid}>".format(cid=cid))
# Path('./results/' + subject + '.msg').write_bytes(bytes(msg))
smtp.send_message(msg)
여기까지 만들고 jobs 폴더에 쿼리를 저장하고 실행해봅니다. 위의 소스는 개인정보로 인해 부분 부분 적혀있지만 잘 동작합니다.
피드백
우선 "특정 시간"에 돌릴 수 있도록 개선해야 합니다. 이는 스케줄러를 이용해서 작업할 수도 있지만 개별 쿼리마다 결과를 받고 싶은 시간이 다를 수 있다고 생각하고 진행할 예정입니다. 그리고 쿼리를 수행하는 것은 문제가 없지만 DB가 다른 곳에서 조회를 하고 싶거나 동적으로 변하는 쿼리를 수행하고 싶을 것 같아서 이 부분도 개선을 해야겠습니다. 마지막으로 메일로 결과를 받는 것은 여전히 좋은 방법이지만 정말 심플한 결과 메세지는 메신저를 이용하여 받는 것이 더 좋을 것 같아서 텔레그램을 이용할 수 있도록 개선하겠습니다.
반응형
'기능과 기술' 카테고리의 다른 글
특정 시간에 조회 쿼리 수행하고 결과를 공유하는 프로그램 (3) (0) | 2022.10.01 |
---|---|
특정 시간에 조회 쿼리 수행하고 결과를 공유하는 프로그램 (2) (1) | 2022.09.30 |
가격조회 로직 상세설명 (3) - 마지막 (0) | 2022.07.05 |
가격조회 로직 (2) (0) | 2022.07.01 |
가격조회 로직 (1) (1) | 2022.06.28 |