[Python] 파이썬 데이터베이스(DB), mysql 연동

업데이트:

파이썬 데이터베이스(DB), mysql 연동

참고 링크

import pymysql
import prestodb
import pyhive
import MySQLdb

위 라이브러리 중 어떤 라이브러리를 사용하더라도 사용법의 큰 차이는 없는 것으로 보인다. 파이썬으로 DB에 연동해서 데이터를 가져오는 순서는 아래와 같다.

  1. 데이터베이스 연결(conn)
  2. 커서(cursor) 생성
  3. SQL문 실행(execute)
  4. 데이터 가져오기(fetchall)
  5. 연결 끊기(close)

1. 데이터베이스 연결

conn = pymysql.connect(host='localhost', user='root', 
                       password='1234', db='namedb', charset='utf8')

2. 커서(cursor) 생성

2-1. 커서(cursor)란?

커서 생성 이전에, 데이터베이스에서 커서란 무엇인지 알아보자.

일반적으로 데이터베이스는 같은 종류의 데이터를 많이 축적하고 있으며, 이용지가 요청하는 데이터는 1건 또는 여러건이 될 수 있다. 이런 경우 커서를 사용하여 다음과 같이 반복자의 요령으로 실현할 수 있다.

  1. 이용자는 검색 및 정렬 순서를 지정하여 커서를 정의한다.
  2. 매개 변수를 사용하는 경우 값을 결정하고 데이터 액세스를 시작한다.
  3. 커서 위치의 데이터를 검색한다. 검색 결과의 끝이라면 7.
  4. 필요에 따라 커서 위치의 데이터를 변경, 삭제한다.
  5. 커서를 ‘다음 데이터’로 진행한다.
  6. 3 반복
  7. 반복 종료 후 커서를 풀어 놓는다.

2-2. 커서(cursor) 사용

curs = conn.cursor()

3. SQL문 실행

sql = "select * from table_A"
curs.execute(sql)

4. 데이터 가져오기

data = curs.fetchall()
data[0] #첫번째 row
data[1] #두번째 row

5. 연결 끊기

conn.close()

6. 라이브러리간 미묘한 차이

import MySQLdb
conn = MySQLdb.connect(host='10.100.100.4', port=3306, user='dbid', passwd='pw', db='dbname', charset='utf8')

import mysql.connector
conn = mysql.connector.connect(host='10.100.100.4', port='3306', user='dbid', password='pw', database='dbname', charset='utf8')

사용법의 미묘한 차이가 보이는가. 기본적으로 라이브러리간 옵션 값이 조금씩 다르며, port의 경우 MySQLdb에서는 정수(int)값을 넣지만, mysql.connector에서는 문자(string)값을 넣는다.