SQL : 13. Python with MySQL - 2

yeppi1802·2024년 6월 11일
0

❇️ 요약

  • 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)
  • 검색 결과를 Pandas로 읽기

df = pd.DataFrame(result)
df
  • db 닫기
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()
  • INSERT 쿼리 작성

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()
  • crime_status 테이블의 데이터 조회

cursor.execute("SELECT * FROM crime_status")

result = cursor.fetchall()
for row in result:
    print(row)
  • 조회한 결과를 Pandas로 변환해서 확인

df = pd.DataFrame(result)
df.head()
  • db 닫기
conn.close()
profile
제로베이스 DA7 김예빈입니다.

0개의 댓글