반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[python] mysql 연동 - PyMySQL 본문

Python

[python] mysql 연동 - PyMySQL

닉의네임 2023. 4. 30. 20:42
반응형

 Python의 MySql모듈 설치

  • Python의 MySql모듈
    • PyMySQL
    • mysql-connector-python ( >= MySQL 8.0) or mysql.connector (< MySQL 8.0)
  •  PyMySQL를 이용하여 접근하는 방법
$ pip install PyMySQL

 

버전확인

pip3 -V

 

conda activate text

 

require.txt 파일에 PyMySQL추가 

 

의존성 주입

pip3 install -r require.txt

 

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

pip install cryptography

 

Python에서 MySQL 접속 절차

  1. PyMySql 모듈을 import
  2. MySQL 연결: pymysql.connect()
    • 호스트명, 로그인, 암호, 접속할 DB 등 지정
  3. DB커서 객체생성: Connection 객체로부터 cursor() 호출
  4. SQL문 실행
    • Cursor객체의 메소드를 사용하여 SQL을 DB서버에 전송 & Fetch
      1. SQL을 DB서버에 전송: execute()
      2. Fetch: fetchall(), fetchone(), fetchmany(n)
    • Connection 객체의 commit(): 삽입, 갱신, 삭제 (INSERT/UPDATE/DELETE)
  5. DB 연결 종료: Connection객체의 close()

Python에서 MySQL 접속 예시

# STEP 1
import pymysql

# STEP 2: MySQL Connection 연결
con = pymysql.connect(host='localhost', user='ldh', password='doo',
                      db='shop', charset='utf8', # 한글처리 (charset = 'utf8')
                      autocommit=True, # 결과 DB 반영 (Insert or update)
                      cursorclass=pymysql.cursors.DictCursor # DB조회시 컬럼명을 동시에 보여줌
 
# STEP 3: Connection 으로부터 Cursor 생성
cur = con.cursor()
 
# STEP 4: SQL문 실행 및 Fetch
sql = "SELECT goods_name, price FROM goods_text"
cur.execute(sql)
 
# 데이타 Fetch
rows = cur.fetchall()
print(rows)     # 전체 rows

# STEP 5: DB 연결 종료
con.close()

Python에서 MySQL TEST

  1. Mysql 접속
import pymysql
import pandas as pd

con = pymysql.connect(host='localhost', user='ldh', password='doo',
                      db='shop', charset='utf8', # 한글처리 (charset = 'utf8')
                      autocommit=True, # 결과 DB 반영 (Insert or update)
                      cursorclass=pymysql.cursors.DictCursor # DB조회시 컬럼명을 동시에 보여줌
                      )
cur = con.cursor()
sql = "select * from goods_text order by id desc limit 10" # goods_text
cur.execute(sql)
rows = cur.fetchall()
con.close() # DB 연결 종료
print(rows)

 

 

데이터프레임형태로 변환 Python으로 불러온 테이블을 데이터프레임으로 출력

goods = pd.DataFrame(rows)

데이터 전처리

idx = goods[(goods['keyword'] != 1) & (goods['name'] != 2)].index
goods.drop(idx, inplace=True) #행 제거

goods.loc[goods['keyword'] == 1, 'name'] = '남성' # 1 ==> 남성
goods.loc[goods['keyword'] == 2, 'name'] = '여성' # 2 ==> 여성

 

데이터 시각화

 

import plotly.express as px
fig = px.histogram(goods, x="keyword", y="price", color="name", marginal="rug")
fig.show()

 

 

반응형
Comments