하마가 분석하마

[python] pymysql을 사용한 sql 연동1 본문

python

[python] pymysql을 사용한 sql 연동1

Rrohchan 2021. 12. 23. 12:01

 

python과 mysql 연동

 

pymysql
  • pymysql은 mysql을 python에서 사용할 수 있는 라이브러리이다. pymysql은 python 프로그램이 mysql의 서버와 연결되어 DB에 저장되어 있는 데이터들을 파이썬으로 불러올 수 있게 해 준다.
  • DB의 ['user', 'password', 'host', 'database', 'charset'] 등을 지정해주고, connect 메소드를 사용하여 객체와 연결을 해준다. 예시를 보며 실습해보자

 

실습

1. 라이브러리 설치

!pip install pymysql

 

2. 라이브러리 호출

import pymysql
import pandas as pd

 

3. mysql과 python 연결

## MYSQL connection으로 host, port 등 확인
host = "127.0.0.1"
port = 3306
database = "class"
username = "root"
password = "abcd1234"
### pymysql을 사용해서 파이썬과 mysql 연결
# .connect 사용
class_db = pymysql.connect(host=host, user=username, passwd=password, db=database, port=port,charset='utf8')

 

4. 연결한 DB와 상호작용 하기위해 cursor 객체 생성

  • cursor 클래스는 실제적으로 DB의 sql 구문을 실행시키고 조회된 결과를 가져오게 된다. 
    ## cursor 객체 생성
    cursor = class_db.cursor()
    cursor​
  •  

코드 실행 결과

 

[cursor 함수]

  • cursor객체.execute() : sql문을 실행시키기 위해 execute 함수 호출
  • cursor객체.fetchone() : 조회된 결과로부터 데이터 1개(하나의 row)를 반환
  • cursor객체.fetchall() : 모든 데이터를 한꺼번에 클라이언트로 가져올 때 사용이 된다.
  • cursor객체.fetchmany() : 여러 개의 데이터를 반환하게 된다.
## sql문 작성
sql = 'select * from exam_result'
cursor.execute(sql)

# 몇 개의 행으로 이루어져 있는지 확인
print(cursor.execute(sql))

## 데이터 1개 가져오기
result_fist = cursor.fetchone()

## 모든 데이터 한번에 가져오기 (1행이 포함되지 않는다.(얖에서 한 줄을 읽었기 때문에 커서가 내려와서 다음 줄부터 읽게 됨))
result_all = cursor.fetchall()

## 여러 개의 데이터를 반환한게 된다.
    # 읽고 싶은 줄 수를 괄호 안에 적어야 함
    # fetchall()을 실행하고 나면 커서가 맨 마지막으로 가 있기에 select 문을 다시 할당해주고 fetchmany()를 확인해야 한다.
cursor.execute(sql)
result_many = cursor.fetchmany(2)

 

5. 튜플 값 확인

 

  • DB의 행이 하나의 튜플에 들어와서 저장되어 있다.
  • 따라서 변수를 출력하기 위해서는 행을 불러온 후에 그 안에서 변수를 출력한다.
## 튜픞 값 확인
for  i in result_many:
	print("## 행:", i, end='\n\n')
    for j in i:
        print("# 변수 출력:", j)
---------------------------------------------코드 실행 결과---------------------------------------------
## 행: ('변수1', '변수2', '변수3', '변수4')

# 변수 출력: 변수1
# 변수 출력: 변수2
# 변수 출력: 변수3
# 변수 출력: 변수4

 

6. 데이터프레임으로 만들기

## fetchall() 데이터 프레임
df_all = pd.DataFrame(result_all)
df_all.head()

코드 실행 결과