본문 바로가기
AI 이론과 개발의 혼재/Python

Python - MySQL (PyMySQL 설치, 기본 사용법 CRUD)

by ministar 2020. 4. 23.

 

Python. MySQL 기본 사용법

 

 

1. PyMySQL 설치

Python에서 MySQL을 사용하기 위해서는 먼저 PyMySQL 설치가 필요합니다.

 

pip install PyMySQL

 

2. 테이블 생성 / 삭제

예제와 함께 해봅시다요~

 

(1) 테이블 생성

import pymysql.cursors
def create_table():

    conn = pymysql.connect(host=HOST,
            user=USER,
            password=PW,
            db=DB,
            charset='utf8mb4')
    
    sql = '''
            CREATE TABLE USERS 
                (
                      USER_ID     VARCHAR(50)    NOT NULL PRIMARY KEY,
                      USER_NM     VARCHAR(200)    NOT NULL COMMENT '사용자명',
                      TEL_NO     VARCHAR(50)   COMMENT '전화번호',
                      EMAIL     VARCHAR(100)   COMMENT '이메일',
                      COMPNY_NM     VARCHAR(200)  COMMENT '회사명',
                      DEPT_NM     VARCHAR(200)   COMMENT '부서명',
                      JDEG_NM     VARCHAR(200)    COMMENT '직급명',
                      WORKING_SITE_NM   VARCHAR(200)  COMMENT '근무지역명',
                      REG_TM     TIMESTAMP   COMMENT '등록일시',
                      CHG_TM     TIMESTAMP   COMMENT '변경일시'
                 )ENGINE=InnoDB DEFAULT CHARSET=utf8
          ''' 
    
    
    try:
        with conn.cursor() as cursor:
            cursor.execute(sql)
        conn.commit()
    finally:
        conn.close()

 

 

(2) 테이블 삭제

def drop_table():

    conn = pymysql.connect(host=HOST,
            user=USER,
            password=PW,
            db=DB,
            charset='utf8mb4')
    
    try:
        with conn.cursor() as cursor:
            sql = 'DROP TABLE USERS'
            cursor.execute(sql)
        conn.commit()
#     print(cursor.rowcount) # 1 (affected rows)
    finally:
        conn.close()

 

 

3. 데이터 CRUD

 

(1) INSERT

try : 
	#DB Connection Setting
    conn = pymysql.connect(host=HOSTNAME
                           , user=USER_NAME
                           , port = PORT
                           , password=PASSWORD
                           , db=DATABASE
                           , charset='utf8', )

    curs = conn.cursor(pymysql.cursors.DictCursor)

    sql = f"INSERT INTO survey_resp_todo (survey_no, email ,todo, todo_type) \
            VALUES('{SURVEY_NO}',%s,%s,%s);"

    for i , row in s_todo_pre.iterrows() :

        curs.execute(sql, (row['메일주소'], row['TODO'], row['TODO구분'] ))
    
    conn.commit()

    
finally : 
    conn.close() 

 

+ DataFrame 전체 Table을 Insert 시키고 싶을 경우

 

#dataframe를 tuple로 만들어 줍니다. 
vals = tuple([tuple(x) for x in df.values])

try : 
	#DB Connection Setting
    conn = pymysql.connect(host=HOSTNAME
                           , user=USER_NAME
                           , port = PORT
                           , password=PASSWORD
                           , db=DATABASE
                           , charset='utf8', )

    curs = conn.cursor(pymysql.cursors.DictCursor)

    sql = f"INSERT INTO survey_resp_todo (survey_no, email ,todo, todo_type) \
            VALUES('{SURVEY_NO}',%s,%s,%s);"

    curs.excutemany(sql, vals)
    conn.commit()
    print(curs.rowcount, "records were inserted.")

    
finally : 
    conn.close() 

 

 

(2) Select

 

conn, curs = get_conn()
sql = "select * from happydata.employee_temp"
curs.execute(sql)

# 데이타 Fetch
rows = curs.fetchall()
print(rows)

이렇게 하면, dictionary 형태로 값이 나오게 되어, 보기 어렵다. 

Select 결과를 DataFrame으로 받기 위해서는 결과 값을 Data Frame에만 넣어주면, 

테이블 형태의 결과값으로 자동 변환 됩니다. 

 

rows_df = pd.DataFrame(rows)

 

 

댓글