[TIL] Python with MYSQL

HYERINยท2024๋…„ 2์›” 9์ผ

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
13/13
post-thumbnail

๐Ÿ’ป ์‹ค์Šต

install mysql driver

# mysql driver ์„ค์น˜
pip install mysql-connector-python

# ์„ค์น˜ํ™•์ธ

import.mysql.connector

Python with MYSQL

create connection

MYSQL์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ

<connection name> = mysql.connector.connect(
		host = "<hostname>",
    	user = "<username>",
    	password = "<password>",
    	database = "<databasename>" #ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
)

close connection

<connection name>.close()

execute SQL

Query ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ

<cursorname> = <connection name>.cursor()
<cursorname>.execute(<query>)

execute SQL File

SQL File ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ

<cursorname> = <connection name>.cursor()

sql = open("<filename>.sql").read()
<cursorname>.execute(sql) # SQL File ๋‚ด์— Query ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ multi=True ์ถ”๊ฐ€

fetchall()

<cursorname> = <connection name>.cursor() # ์ฝ์–ด์˜ฌ ๋ฐ์ดํ„ฐ ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ buffered=True
mycursor.execute(<query>)

result = <cursorname>.fetchall()
for data in result:
	print(data)

โž• ๊ฒ€์ƒ‰๊ฒฐ๊ณผ pandas ๋กœ ์ฝ๊ธฐ

import pandas as pd

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

CSV ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Python ์œผ๋กœ INSERT ํ•˜๋Š”๋ฒ•

  • mysql ์— ์ ‘์†ํ•œ ์ƒํƒœ

1๏ธโƒฃ read csv

import pandas as pd

df = pd.read_csv("<csvfilename>") # csv ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ๊ฒฝ์šฐ, encoding ๊ฐ’์„ 'euc-kr' ๋กœ ์„ค์ •
df.head()

2๏ธโƒฃ cursor ๋งŒ๋“ค๊ธฐ

<cursorname> = <connection name>.cursor(buffered=True)

3๏ธโƒฃ inser๋ฌธ ๋งŒ๋“ค๊ธฐ

sql = "insert into <tablename> values (%s, %s,...)"

4๏ธโƒฃ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ

for i, row in df.iterrows():
	<cursorname>.execute(sql, tuple(row))
    print(tuple(row))
    <connection name>.commit() # commit() ์€ database ์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น

5๏ธโƒฃ ๊ฒฐ๊ณผํ™•์ธ

<cursorname>.execute("select * from <tablename>")

result = <cursorname>.fetchall()
for row in result:
	print(row)

โž• pandas ๋กœ ๊ฒฐ๊ณผ ์ฝ๊ธฐ

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

๐Ÿงธ review

  • ๊ณต๊ณต๋ฐ์ดํ„ฐ csv ํŒŒ์ผ๋กœ ์—ฐ์Šตํ•˜๊ธฐ
    ๊ธฐ์ƒ์ฒญ ๊ธฐ์ƒ์ž๋ฃŒ๊ฐœ๋ฐฉํฌํ„ธ https://buly.kr/A42pJWU

โŒ encoding='utf-8' ๋กœ ํ•˜๋ฉด ํ•œ๊ธ€์ด ๊นจ์ง€๊ณ ,
encoding='cp949' & 'euc-kr'์€ ์ธ์‹์„ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ ๐Ÿ˜ญ

[-ํ•ด๊ฒฐ๋ฐฉ์•ˆ ์ •๋ฆฌํ•ด์„œ ์ž‘์„ฑํ•˜๊ธฐ-]

-- ์ด๋ฒˆํŒŒ์ผ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌ์ง€ ์•Š์•„์„œ csv ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉํ•จ.

  • AWS RDS(database-1) review ์— ์ ‘์†
conn = mysql.connector.connect(
    host = "database-1.ct6emoc66tc9.ap-southeast-2.rds.amazonaws.com",
     port = "3306",
    user = "admin",
    password = "***********",
    database = "review"
)
  • Temperature Table ์ƒ์„ฑํ•˜๊ธฐ
sql = "create table temperature (๋‚ ์งœ date, ์ง€์—ญ varchar(8), ํ‰๊ท ๊ธฐ์˜จ float, ์ตœ์ €๊ธฐ์˜จ float, ์ตœ๊ณ ๊ธฐ์˜จ float)"
cursor = conn.cursor(buffered=True)

cursor.execute(sql)
  • ๋ฐ์ดํ„ฐ๋ฅผ pandas๋กœ ์ฝ์–ด์˜ค๊ธฐ
df = pd.read_csv("temperature.csv", encoding='utf-8')
df.head(2)
  • ๋ฐ์ดํ„ฐ๋ฅผ temperature ํ…Œ์ด๋ธ”์— insert ํ•˜๊ธฐ
sql = "insert into temperature values(%s,%s,%s,%s,%s)"
cursor = conn.cursor(buffered=True)

for i, row in df.iterrows():
    cursor.execute(sql, tuple(row))
    print(tuple(row))
    conn.commit()
  • temperature ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜๊ธฐ
cursor.execute("select*from temperature")

result = cursor.fetchall()
for row in result:
    print(row)
  • ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Pandas ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ธฐ
df = pd.DataFrame(result)
df.head()

์‹ค์Šตํ™•์ธ


0๊ฐœ์˜ ๋Œ“๊ธ€