[Python] 파이썬에서 mysql 데이터베이스 연결을 위한 pymysql 라이브러리



Python에서 mysql을 연동하기 위하여 사용 가능한 라이브러리는 다양합니다.

그 중에서 pymysql라는 라이브러리를 정리해 보겠습니다.

 

ㅇ 참고 사이트

  • https://github.com/PyMySQL/PyMySQL
  • https://pymysql.readthedocs.io/en/latest/user/installation.html

 

pymysql을 설치하는 부분은 pip 명령어를 이용하여 쉽게 설치 가능합니다.

$ python3 -m pip install PyMySQL

 

Pymysql 분석


참고 사이트 중 documentation(https://pymysql.readthedocs.io/en/latest/user/installation.html)을 보면 예제가 잘 나와 있습니다.

예제 코드는 아래와 같습니다.

import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        # Create a new record
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('webmaster@python.org', 'very-secret'))

    # connection is not autocommit by default. So you must commit to save
    # your changes.
    connection.commit()

    with connection.cursor() as cursor:
        # Read a single record
        sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
        cursor.execute(sql, ('webmaster@python.org',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

 

ㅇ pymysql.connect()

Python에서 데이터베이스에 접속하기 위해서는 DB접속 정보를 입력하여 연결을 맺은 후, Cursor를 생성하여 우리가 수행하고자 하는 쿼리 만들어 수행하면 됩니다.

  • host=‘localhost’ : 데이터베이스 주소
  • user=‘user’ : 데이터베이스 계정
  • password=‘passwd’ : 데이터베이스 패스워드
  • db=‘db’ : 데이터베이스명
  • charset=‘utf8mb4’ : 문자 인코딩 방식
  • cursorclass=pymysql.cursors.DictCursor : Dictionary 커서를 사용

cursorclass의 경우 지정을 하지 않으면 기본적으로 데이터를 읽어올 때 배열로 리턴을 하게 됩니다.

데이터베이스 연결 시, cursorclass를 DictCursor로 지정하면 결과값을 조회할 때 Dictionary 형태로 리턴하게 됩니다.

데이터를 배열로 처리하는 것 보다는 Dictionary로 처리할 경우 좀 더 유용하게 다룰 수 있을 것 같습니다.

 

ㅇ with connection.cursor() as cursor

커서를 생성하는 코드입니다. pymysql에서 위와 같이 사용하는 것으로 봐서는 권장하는 코딩 형태로 생각이 됩니다.

with문을 사용하지 않고 커서를 생성하여 쿼리를 수행할 수도 있습니다. 그러나 with문을 사용하지 않을 경우, connection을 close() 함수를 이용하여 connection 별로 모두 세션을 해제해 주어야 합니다.

그러나 with문을 사용하면 여러개의 커서를 생성하고 쿼리를 수행한 후, 커서별로 자동적으로 connection을 해제해 주는 역할을 하기 때문에 connection 해제 관리를 비교적으로 덜 신경써도 되는 유용함이 있을 것이라 생각됩니다.

 

ㅇ cursor.execute(sql)

쿼리를 실행시키는 함수입니다.

sql 변수에 수행하고자 하는 쿼리를 작성하여 execute()로 실행을 하면 데이터베이스에 실제 쿼리가 수행되게 됩니다.

추가적으로 commit이 필요한 쿼리의 경우 connection.commit()을 실행하여 변경사항에 대해서는 반영해 주어야 하며 데이터베이스에서 얘기하는 commit과 동일한 역할을 합니다.

 

ㅇ connection.close()

데이터베이스에 연결된 connection을 종료 합니다.

 

pymysql을 이용하여 다양한 쿼리 수행 테스트를 해보고 내용을 정리하여 공유할 수 있도록 하겠습니다.



1 thought on “[Python] 파이썬에서 mysql 데이터베이스 연결을 위한 pymysql 라이브러리”

Leave a Comment