❇️ 요약
- Python with MySQL Fetch all
- Python with MySQL CSV
📖 Fetch all
이론
🔆 Fetch all
- 쿼리를 실행한 다음에 결과 값이 row를 포함하고 있으면 Fetch all해서 프린트
- 데이터를 변수에 담을 수 있다.
mycursor.execute(query)
result = mycursor.fetchall()
for data in result:
print(data)
실습
☁️ Fetch all
- sql_file 테이블 조회(읽어올 데이터 양이 많은 경우
buffered=True)

import mysql.connector
remote = mysql.connector.connect(
host = "myhostname",
port = 3306,
user = "admin",
password = "********",
database = "zerobase"
)
cur = remote.cursor(buffered=True)
cur.execute("SELECT * FROM sql_file")
result = cur.fetchall()
print(result)
for result_iterator in result:
print(result_iterator)
remote.close()
☁️ 참고, 검색결과를 Pandas로 읽기

import pandas as pd
df = pd.DataFrame(result)
df.head()
📖 CSV
CSV에 있는 데이터를 Python으로 INSERT
🔆 Read CSV
- 제공 받은 police_station.csv를 Pandas로 읽어와서 데이터 확인

import pandas as pd
df =pd.read_csv("csv\police_station.csv")
df.head()
🔆 Zerobase에 연결

import mysql.connector
conn = mysql.connector.connect(
host = "myhostname",
port = 3306,
user = "admin",
password = "********",
database = "zerobase"
)
🔆 Cursor 만들기
- 읽어올 양이 많은 경우 cursor 생성 시 buffer 설정을 해준다.
cursor = conn.cursor(buffered=True)
🔆 INSERT 문 만들기
sql = "INSERT INTO police_station VALUES(%s, %s)"
더 자세히 알아보기
🔆 데이터 입력
- commit()은 database에 적용하기 위한 명령

for i, row in df.iterrows():
cursor.execute(sql, tuple(row))
print(tuple(row))
conn.commit()

cursor.execute("SELECT * FROM police_station")
result = cursor.fetchall()
for row in result:
print(row)

df = pd.DataFrame(result)
df
conn.close()
🔆 TIP
- csv 한글이 깨지는 경우, encoding 값을 ‘euc-kr’로 설정 (특히 우리나라 사이트에서 제공받은 csv 파일들)

import pandas as pd
df = pd.read_csv('csv/2020_crime.csv', encoding='euc-kr')
df.head()
실습
☁️ crime_status 테이블에 2020_crime.csv 데이터를 입력하는 코드 작성
- AWS RDS(database-1) zerobase 접속

import mysql.connector
conn = mysql.connector.connect(
host = "myhostname",
port = 3306,
user = "admin",
password = "********",
database = "zerobase"
)
- 2020_crime.csv 데이터 (encoding=’euc-kr’)읽어오기

import pandas as pd
df = pd.read_csv('csv/2020_crime.csv', encoding='euc-kr')
df.head()

2020에 (“ ”) 이 있으니 전체에 (“”” “””) 해야함
sql = """INSERT INTO crime_status VALUES("2020", %s, %s, %s, %s)"""
cursor = conn.cursor(buffered=True)
- 데이터를 crime_status 테이블에 INSERT

for i, row in df.iterrows():
cursor.execute(sql, tuple(row))
print(tuple(row))
conn.commit()

cursor.execute("SELECT * FROM crime_status")
result = cursor.fetchall()
for row in result:
print(row)

df = pd.DataFrame(result)
df.head()
conn.close()