본문 바로가기

기능과 기술

특정 시간에 조회 쿼리 수행하고 결과를 공유하는 프로그램

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가 다른 곳에서 조회를 하고 싶거나 동적으로 변하는 쿼리를 수행하고 싶을 것 같아서 이 부분도 개선을 해야겠습니다. 마지막으로 메일로 결과를 받는 것은 여전히 좋은 방법이지만 정말 심플한 결과 메세지는 메신저를 이용하여 받는 것이 더 좋을 것 같아서 텔레그램을 이용할 수 있도록 개선하겠습니다.

 

반응형