새소식

언어/파이썬(Python)

파이썬 데이터베이스(mysql) 연동하기, pymysql 이용해서 데이터 읽고 쓰기

  • -

 파이썬으로 mysql과 연동하는 방법을 알아보곘습니다!

pymysql이라는 라이브러리를 이용하면 쉽게 연동할 수 있습니다

연결하는건 식은 죽 먹기고 쿼리문을 어떻게 잘 짜냐에 달렸겠네요

 

 

pip install pymysql

위 명령어를 이용하여 pymysql을 설치합니다

 

물론 mysql 연동을 하기 위해서는 mysql server가 열려있어야 겠죠??

보통 localhost로 많이 여니까 localhost로 접근하겠습니다

 

pymysql로 데이터 가져오기 예제 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pymysql
 
conn = pymysql.connect(host='localhost', user='root', password='root', db='dbexam', charset='utf8')
try:
    with conn.cursor() as curs:
        sql = "SELECT id, pw FROM user"
        curs.execute(sql) # 실행할 sql문 넣기
        rs = curs.fetchall() # sql문 실행해서 데이터 가져오기
 
        for row in rs:
            for data in row:
                print(data, end=' ')
            print()
finally:
    conn.close()
cs

예제 코드는 위와 같습니다

여기서 중요한건 connect와 curosr 입니다

connect로 mysql 데이터베이스를 연결하고

연결 객체의 cursor를 이용하여 sql 명령어를 이용해 원하는 것을 합니다

 

위 예제에서는 간단하게 user라는 테이블에 id와 pw 컬럼이 있을때 가져오는

select 쿼리문을 작성해봤습니다

 

pymysql.connect()

아래에서 connect에 들어갈 몇가지 인자에 대해서 알아보겠습니다

  • host – DB 서버가 위치한 HOST 이름
  • user – 로그인할 user 이름
  • password – user 비밀번호
  • database – 사용할 DB 이름
  • port – 사용할 포트 번호 (default: 3306)
  • charset – 사용할 charset

위 6가지 인자만 알아도 일반적으로 mysql과 연동하는데 문제는 없을 것입니다

자세한 사항은 아래의 사이트를 참고하시면 됩니다!

https://pymysql.readthedocs.io/en/latest/modules/connections.html

mysql 기본 포트가 3306 포트인데 만약 바꿨다면

port를 명시해주어야 합니다

 

아니면 위와 같은 에러를 만날 수도 있습니다

아마 외부에서 접근 권한이 없거나 포트가 틀려 찾지 못한 것일 수 있습니다

 

위의 예제에서 sql 문만 바꿔서 사용하면 됩니다

 

update 쿼리 작성

위에서는 제일 간단하게 select문을 이용해봤습니다

이번에는 update 문을 이용해 값을 변경해보겠습니다

1
2
3
4
5
6
7
8
9
10
11
12
try:
    with conn.cursor() as curs:
        sql = "SELECT math FROM students"
        curs.execute(sql)
        rs = curs.fetchall()
 
        update_sql = "UPDATE score SET math=%s"
        for row in rs:
            curs.execute(update_sql, (row[0+ 10# update 쿼리 실행
    conn.commit()
finally:
    conn.close()
cs

student라는 테이블에 int형의 math column이 있다고 가정해보겠습니다

모든 수학점수를 10점씩 올려주려고 합니다. 어떻게 하면 될까요??

1. select로 원래 수학점수를 가져온다

2. for문을 순회하며 update 쿼리를 계속 실행한다

3. commit을 하여 실제 db에 반영한다

위와 같은 과정을 거치면 mysql DB의 값을 변경할 수 있습니다

 

update 쿼리

위에서 update 쿼리를 작성하며 '%s'를 사용했습니다

하지만 math는 int형 컬럼입니다

그러면 '%d'를 사용해야 할까요??? 아닙니다!!

모두 %s를 사용하시면 됩니다

column의 타입이 decimal이든 VARCHAR이든 %s를 사용하시면 됩니다!!

 

그리고 %s에 해당하는 update할 값을 execute 실행시에 인자로 넣어주시면 %s로 값이 들어가게 됩니다

값을 여러개 바꾸려 한다면 순서에 맞게 인자로 넣어주시면 끝!!!

 

그리고 commit을 꼭 해주셔야 값이 변경됩니다!!!

만약 수천개의 데이터를 바꾼다면 중간에 한 번씩 commit을 해주시기 바랍니다

중간에 인터넷이 끊기거나 한다면 처음부터 다시 해야하니까요 ㅠㅠㅠ(경험자)

 

나머지 쿼리문도 크게 다를 것 없습니다. 주로 이 두가지 쿼리면 충분할 것 같긴하네요

예제를 익히고 응용은 여러분들의 몫입니다

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.