본문 바로가기

Data_Analysis_Track_33/Python

Python_11-2(pymysql을 이용한 mysql 연동)

update/delete
- 코딩 절차는 insert 와 동일

update

update_sql = "update member set tall = tall + 10 where id = %s"
with pymysql.connect(host="localhost", port = 3306, user = 'playdata', password = '1111', db = 'testdb') as conn:
    with conn.cursor() as cursor:
            cnt = cursor.execute(update_sql, [2])
            print(cnt) # 바뀐 행 개수 출력
            conn.commit()

delete

delete_sql = "delete from member where tall < %s"
with pymysql.connect(host="localhost", port = 3306, user = 'playdata', password = '1111', db = 'testdb') as conn:
    with conn.cursor() as cursor:
            cnt = cursor.execute(delete_sql, (170, )) # 튜플로 전달하려면 (값, ) 형식으로 넣을 것
            print(cnt) # 삭제된 행 개수 출력
            conn.commit()

select (DQL - Data Query Language) : 조회결과 조회
- cursor.execute("select문") 실행 후 cursor의 결과 조회 메소드(fetch메소드)를 이용해 결과를 받는다.

 

fetch메소드
fetchall()
- 조회한 모든 행을을 반환
fetchmany(size=개수)
- 지정한 size개수 만큼 반환
fetchone()
- 조회결과 중 첫번째 행만 반환
- 주로 pk 동등 조건으로 조회한 경우 사용

 

fetchall()

import pymysql
from pprint import pprint # 자료구조(list, tuple, dictionary, set)을 가독성 좋게 출력해준다.

sql = "select * from member where name like %s"
with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'testdb') as conn:
    with conn.cursor() as cursor:
        # select 실행결과(result set)은 cursor의 속성으로 저장된다.
        cursor.execute(sql, ['%2']) # name이 2로 끝나는 경우를 조회
        # cursor가 가진 조회결과 조회
        result = cursor.fetchall()
        
print(result)

pprint

pprint(result)

member 테이블에서 지정한 키보다 큰 사람의 정보 조회

tall = float(input("조회할 키"))
sql = "select * from member where tall > %s"
with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'testdb') as conn:
    with conn.cursor() as cursor:
        cnt = cursor.execute(sql, [tall]) # 조회된 행수가 반환
        result = cursor.fetchall() # 조회결과가 없으면 빈 tuple를 반환.
        print(len(result), cnt)
if cnt == 0:
    print("조회결과 없음")
else:
    show_result(result)

fetchone()

# primary key로 조회할 때 사용 (조회결과가 한행일때 사용.)
# sql = "select name, email from member where id = %s"
sql = "select name, email from member where id > %s"
with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'testdb') as conn:
    with conn.cursor() as cursor:
        cnt = cursor.execute(sql, (5, ))
        print(cnt) # select 결과는 여러개
        # result = cursor.fetchall()
        result = cursor.fetchone() # select 결과가 여러행일 경우에 첫번째 행만 반환
        print(result)

fetchmany()

sql = "select name, email from member"
with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'testdb') as conn:
    with conn.cursor() as cursor:
        cnt = cursor.execute(sql)
        print(cnt)
        result = cursor.fetchmany(size = 3) # size 행만큼만 조회
        pprint(result)

cursor 는 iterable 타입
- for문에 select 실행한 cursor를 사용하면 조회결과를 한 행씩 조회할 수 있다.

# cursor(select 실행후)는 Iterable 타입 -> for in 에 직접 넣어서 순환조회 가능.
sql = "select * from member where tall > %s"
with pymysql.connect(host = 'localhost', port = 3306, user = 'playdata', password = '1111', db = 'testdb', cursorclass=pymysql.cursors.DictCursor # 조회행을 dictionary로 반환
                    ) as conn:
    with conn.cursor() as cursor:
        # print(type(cursor))
        cnt = cursor.execute("select * from member")
        print("조회행수", cnt)
        # result = cursor.fetchall()
        for row in cursor:
            print(row)