KT AIVLE School/SQL

jupyter lab에서 MySQL연결

Rabet 2024. 12. 4. 13:58

 

 

1. 라이브러리 설치

!pip install pymysql 
# 암호화 모듈을 설치한 후 런타임을 재시작합니다.(아나콘다의 경우 설치 불필요)
# !pip install cryptography

 

2. 라이브러리 불러오기

import pymysql
import pandas as pd
from sqlalchemy import create_engine

 

3. mysql 연결

user = 'root'
password = 'aivle'
host = '127.0.0.1'
database = 'myshop2024'

connect_string = f'mysql+pymysql://{user}:{password}@{host}/{database}'
mysql = create_engine(connect_string)

 

비밀번호에 @이 들어갈 경우

from urllib.parse import quote_plus
password = quote_plus(password)

 

4. 데이터 읽어오기

# 쿼리문
sql = """
SELECT customer_name, customer_id, IF(gender='M', '남자', '여자') AS gender, 
       phone, city, register_date, point 
    FROM customer
    WHERE point >=500000
    ORDER BY customer_name ASC
"""

# 데이터프레임 만들기
data = pd.read_sql(sql, con=mysql) 

# 확인
data.head()

#집계 결과 가져오기
# 쿼리문
sql = """
SELECT city AS 지역, 
       SUM(point) AS 포인트합, 
       GROUP_CONCAT(customer_name ORDER BY customer_name ASC) AS 고객명 
    FROM customer
    WHERE YEAR(register_date) = 2021 AND point > 0
    GROUP BY city
    ORDER BY 포인트합 DESC
"""

# 데이터프레임 만들기
data = pd.read_sql(sql, con=mysql) 

# 확인
data.head(10)

 

5. 그래프 그리기

import matplotlib.pyplot as plt
plt.plot(data['point'])
plt.show()

 

오류나면 다음 코드

import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

 

6. 뷰로 받기

CREATE VIEW 고객정보 AS
SELECT city AS 지역, 
       SUM(point) AS 포인트합, 
       GROUP_CONCAT(customer_name ORDER BY customer_name ASC) AS 고객명 
    FROM customer
    WHERE YEAR(register_date) = 2021 AND point > 0
    GROUP BY city
    ORDER BY 포인트합 DESC
sql = "SELECT * FROM 고객정보"
# 데이터프레임 만들기
data = pd.read_sql(sql, con=mysql) 

# 확인
data.head(10)