Python with MySQL, CSV

JoQuri(조규리)·2024년 1월 1일
0

MySQL

목록 보기
4/5
  • vscode프로그램 활용: ds_study커널(Python 3.8버전), sql_ws폴더(.ipynb/.sql파일), 터미널
  • AWS RDS 데이터베이스 이용

TIP! 한글 인코딩 오류시
mysql -h "엔드포인트" -P 3306 -u admin -p --default-character-set utf8mb4

Python with MySQL

: 파이썬으로 mysql접속 쿼리실행 조회 pandas변환 출력

  • 먼저 MySQL Driver 를 설치 (pip install mysql-connector-python)

기본형태

import mysql.connector

mydb = mysql.connector.connect(
    host=   ,                    #'localhost', '엔드포인트'
    user=   ,                    #'root', 'admin'
    password= ,
    
    databses= , 
    
    #AWS RDS와 같이 외부DB
    port=                        # 3306 
)

mydb.close()

SQL Query 실행 코드

(예: table생성, 삭제)
TIP! SQL 쿼리에서 컬럼 이름이나 테이블 이름을 감싸는 따옴표('') 대신 역따옴표(``)를 사용해야 함 -> 다만, 쿼리문 조회할때도 역따옴표로 해야함

cur = remote.cursor()
cur.execute("CREATE TABLE 테이블명 (컬럼들)")

cur.execute("DROP TABLE 테이블명")

SQL File(.sql문서)로 Query 실행(쿼리 하나/여러 개)

# 쿼리 실행이 하나일 경우
cur = mydb.cursor()
sql = open('파일명.sql').read()     # 경로가 다른데 있다면 ('./파일명.sql') 
cur.execute(sql)


# 파일 내 쿼리가 여러 개 multi=True
# 쿼리 실행시 데이터베이스에 바로 적용X commit()하는 순간 적용됨
cur = mydb.cursor()                    
sql = open("파일명.sql").read()

for result_iterator in cur.execute(sql, multi=True):            # 확인차
    if result_iterator.with_rows:           # 결과값이 row를 포함하고 있으면 fatchall
        print(result_iterator.fetchall())
    else:
        print(result_iterator.statement)

remote.commit()         # database에 적용하기 위한 명령어

Fetch All

'조회'하는 쿼리 실행시(예:select from) 데이터를 가져오기에 그 데이터를 fetchall로 가져와 변수에 담을수있음('실행'하는 쿼리가 아닌)
-> for문으로 한 줄씩 추출가능 -> pandas. DataFrame변환도 가능!!!!

for result_iterator in result:
    print(result_iterator)   
df = pd.DataFrame(result) # 검색 결과를 Pandas 읽기

buffered = True 옵션 읽어올 데이터양이 많을 경우

Python with MySQL & CSV

: (큰용량의) excel, csv파일을 DB에 넣고 Query execute하고 싶을때?
mysql 인터페이스로 할 수 있지만 encoding이 문제!!
특히 우리나라 사이트 다운받은 파일들이 utf-8이 아닌 경우가 많아 파이썬로 이용!!

Tip!! csv 한글이 깨지는 경우, pd.read_csv에서 encoding 값을 'euc-kr' 로 설정(대부분 utf-8)
(특히 우리나라 사이트에서 제공받은 csv 파일들.)

데이터(.csv)를 Python으로 INSERT

import pandas as pd
df = pd.read_csv('파일.csv', encoding= )

# AWS RPS 데이터베이스와 연결
conn = mysql.connector.connect(host= ,.... ) 

# cursor 하기
cur = conn.cursor(buffered=True) #읽어올 양이 많을때

# insert문 만들기
sql = 'insert into 테이블명 values(%s, ,..)'     #  %s string값  

# 데이터 입력
for i,row in df.iterrows():
    cur.execute(sql, tuple(row))
    print(tuple(row))        # 각 내용들이 튜플 형태로 (   ,   )
    conn.commit()

결과 확인 및 검색결과 Pandas로 읽기

cur.execute("select * from 테이블명")

result = cur.fetchall()
result          #[(  ),(   ),,,]형태  -> for문으로 하나씩 볼 수 있음

df = pd.DataFrame(result)
df

0개의 댓글