Data Analysis for Investment & Control

Python 기반 MySQL 연동하기 본문

Code/Python

Python 기반 MySQL 연동하기

아슈람 2016. 6. 23. 23:46
반응형



이 포스트는 개인적으로 Python을 공부하는 과정에서 추후 리마인드를 위해 작성합니다.



Python을 이용해서 웹 크롤링하고 유효한 정보를 추출하게 된다면 이를 정리해서 DB에 저장해야 한다. 이번 포스트에서는 Python에서 MySQL 서버에 접속하여 데이터를 입출력하는 내용을 다룰 것이다.

MySQL은 C/C++이나 C# 등의 언어로 접근할 수 있도록 하는 Connector를 제공한다. 마찬가지로 Python에도 Connector를 제공하는데, 이에 대한 설명이나 설치 방법, 설치 파일 등은 다음의 링크를 참조하자.





다운로드 사이트에서 설치된 Python 버전과 OS를 확인하여 적당한 것을 받아 설치한다. 나는 Windows 10 64bit에 Python 2.7 버전이 설치되어 있으므로 해당 버전을 다운 받아 설치한다.




설치가 되면 위와 같이 site-packages 리스트에 MySQL 항목이 생긴다.



이제 Python 코드에 대해 알아보도록 하자.


MySQL에 연동하기 위한 Python 예제는 위의 링크의 Coding Example(Connecting to MySQL Using Connector/Python)에서 찾아 볼 수 있다. 여기서는 이를 기반으로하여 AWS에 설정해둔 RDS - MySQL 서버에 접속하여 데이터를 얻어오는 것을 구현하려고 한다.


from __future__ import print_function
import mysql.connector
from mysql.connector import errorcode

cnx = mysql.connector.connect(user='admin',
password='xxxxxxx',
host='db-xxxxxx.xxxxxxxxxxxx.ap-northeast-2.rds.amazonaws.com',
database='prometheus',
port=3306)

cursor = cnx.cursor()

query = "SELECT Date, StockPrice, ExchangeVolume FROM TableName;"

cursor.execute(query)
for (Date, StockPrice, ExchangeVolume) in cursor:
print("{:%d %b %Y} Price = {}, Volume = {}".format(
Date, StockPrice, ExchangeVolume))

cursor.close()
cnx.close()

대략 작성된 코드는 위와 같다. mysql.connector를 import하여 connect 함수로 연결을 시작한다. 함수 인자로는 user, password, host, database, port가 있음을 참고하자.

해당 DB에는 한국에 상장된 모든 기업에 대한 일정 기간의 주가 데이터가 존재하는데, 위와 같이 query문을 작성하여 타겟 TableName(실제로는 특정 기업에 대한 고유 번호를 가지는 테이블 이름)의 날짜, 주가, 거래량을 얻어오도록 하겠다.

얻어온 데이터에서 for문을 돌며 순차적으로 날짜, 주가, 거래량을 출력하여 DB에 접속이 제대로 되었는지, 되었다면 쿼리가 제대로 먹혔는지를 검증한다.


코드가 수행되면 위와 같이 날짜, 주가, 거래량 정보가 순차적으로 출력됨을 알 수 있으며 DB 연동과 쿼리가 제대로 동작한다는 것이 검증되었다.


이 밖에 Table의 생성, Table에 데이터 Insert 하기 등의 동작은 위 링크의 Code Example을 참조하도록 하자. 여기서는 Python을 통해 MySQL DB 서버에 접속 및 기본적인 동작이 이루어 지는 것에 대한 설명을 한 것으로 포스팅을 마무리 하려고 한다.



몇 차례에 걸쳐 Python을 이용한 코딩과 활용에 대해 알아보았다. 원래 웹 크롤링을 해보려고 시작은 했지만 회사일이 바쁘다는 핑계로 2주 가까이나 지났음에도 불구하고 아직 자연어 처리나 스케줄링에 관한 내용은 진행 중이다.


다음에 Python 관련 포스팅은 이런 것들이 어느정도 진행 완료가 되어 실제 웹 크롤링 서버가 동작이 되면 차차 정리할 예정이다.








(내용이 마음에 드셨다면 아래의 '공감' 버튼을 눌러주세요^^)

반응형
Comments