MySQL ์ฐ๋
python์ ์ด์ฉํด์ MySQL ์ฐ๋์ ํด๋ณด์.
๋จผ์ pip๋ PyCharm ์ธํฐํ๋ฆฌํฐ ์ค์ ์ผ๋ก pymysql ๋ชจ๋์ ์ค์นํด์ค๋ค.
pip install PyMySQL
์์ ํ์ผ๋ ๋ค๋ฃจ์ด์ผํ๊ธฐ ๋๋ฌธ์ openpyxl ๋ชจ๋์ด ์๋ค๋ฉด ๋ง์ฐฌ๊ฐ์ง๋ก pip๋ฅผ ์ด์ฉํด์ ์ค์นํด์ค๋ค.
์๋ ๋ชจ๋๋ค์ import ํด์ค๋ค.
import pymysql
from openpyxl import Workbook
from openpyxl import load_workbook
๊ฐ๋จํ ํ ์คํ ์ ์ํด local์ ์ค์น๋ MySQL DB์ ํ ์ด๋ธ์ ๋ง๋ค์ด์ค๋ค.
create table test(num int(11), name varchar(10));
ํ์์ ์ธ ๋ถ๋ถ์ ์๋์ง๋ง, ๊ฐ๋ ์ฑ์ ์ํด CRUDํจ์๋ค์ ์ฌ์ฉํ ํด๋์ค๋ฅผ ํ๋ ๋ง๋ค์ด ๋์.
#DB ํ
์ด๋ธ ์นผ๋ผ๋๋ก ๋ง๋ ๊ฐ์ฒด
class Test:
def __init__(self, num, name):
self.num = num
self.name = name
์ด์ ๊ฐ CRUD๋ฅผ ํจ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ์.
๋ชจ๋ ํจ์๋ค์ connection Leak๋ฅผ ๋ง์์ฃผ๊ธฐ ์ํด try .. finally ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ , with๋ฌธ์ผ๋ก cursor๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก ํด์ ๋๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.
DB Select All
#์ ์ฒด Select
def select_all():
conn = pymysql.connect(host='localhost', user='root', password='๋น๋ฐ๋ฒํธ', db='python', charset='utf8')
try:
with conn.cursor() as curs:
sql = "select * from test"
curs.execute(sql)
rs = curs.fetchall()
for row in rs:
print(row)
finally:
conn.close()
DB Insert
#DB Insert
def insert_test(test_obj):
conn = pymysql.connect(host='localhost', user='root', password='๋น๋ฐ๋ฒํธ', db='python', charset='utf8')
try:
with conn.cursor() as curs:
sql = 'insert into test values(%s, %s)'
curs.execute(sql, (test_obj.num, test_obj.name))
conn.commit()
finally:
conn.close()
DB Delete
#num์นผ๋ผ์ผ๋ก DB Delete
def delete_test(num):
conn = pymysql.connect(host='localhost', user='root', password='๋น๋ฐ๋ฒํธ', db='python', charset='utf8')
try:
with conn.cursor() as curs:
sql = 'delete from test where num=%s'
curs.execute(sql, num)
conn.commit()
finally:
conn.close()
DB Delete All
#DB Delete All
def delete_all():
conn = pymysql.connect(host='localhost', user='root', password='๋น๋ฐ๋ฒํธ', db='python', charset='utf8')
try:
with conn.cursor() as curs:
sql = 'delete from test'
curs.execute(sql)
conn.commit()
finally:
conn.close()
DB Update
#DB Update
def update_test(test_obj):
conn = pymysql.connect(host='localhost', user='root', password='๋น๋ฐ๋ฒํธ', db='python', charset='utf8')
try:
with conn.cursor() as curs:
sql = 'update test set name=%s where num=%s'
curs.execute(sql, (test_obj.name, test_obj.num))
conn.commit()
finally:
conn.close()
MySQL ๋ฐ์ดํฐ ์์ ํ์ผ ์ฐ๊ธฐ
์ข
์ข
DB์ ๋ด์ฉ์ ์์
ํ์ผ๋ก ๋ฐ์ด์ ํ์ธ์ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
csvํ์ผ๋ก ๋ง๋ค์ด์ ๋ฐ๋ก ์ฌ๋ฆฌ๊ณ ๋ด๋ ค๋ฐ๊ณ ํ ์ ์๋๋ฐ... ํ์๊ฐ ์ฌ๋ฌ๋ฒ ํด๋ณธ ๊ฒฝํ์ผ๋ก ํ๊ธ ๋๋ฌธ์ ๋ฌธ์๊ฐ ๊นจ์ง๊ณ , ๊ฐํน ๋ฐ์ดํฐ ์์ ","๊ฐ ๋ค์ด ์์ผ๋ฉด ๋ค๋ฅธ ํน์๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถ์ ํด์ผ ์ ํํ๊ฒ ์ ์ ๋ ๋ฐ์ดํฐ๊ฐ ๋จ์ด์ง๋ค.
์ด์ฐจํผ csvํ์ผ๋ ์์
ํ์ผ๋ก ๋ณํํด์ผํ ๊ฑฐ ์๋์ ์ธ ์ธก๋ฉด์์ ๋ง์ด ์ฐจ์ด๊ฐ ์๋๋ค๋ฉด Python์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ด๋์ํค๋๊ฒ ํธํ๋ค.
insert_testํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ 1000๊ฐ์ ๋ ๋ง๋ค์ด ๋๊ณ ์์
ํ์ผ๋ก ๋จ์ด์ง๊ฒ์ ํ์ธํด๋ณด์.
#์ ์ฒด Select ํ์ฌ ์์
ํ์ผ ์ฐ๊ธฐ
def select_all_to_excel():
conn = pymysql.connect(host='localhost', user='root', password='๋น๋ฐ๋ฒํธ', db='python', charset='utf8')
try:
with conn.cursor() as curs:
sql = "select * from test"
curs.execute(sql)
rs = curs.fetchall()
wb = Workbook()
ws = wb.active
#์ฒซํ ์
๋ ฅ
ws.append(('๋ฒํธ','์ด๋ฆ'))
#DB ๋ชจ๋ ๋ฐ์ดํฐ ์์
๋ก
for row in rs:
ws.append(row)
wb.save('/Users/Jamong/Desktop/์ซ์.xlsx')
finally:
conn.close()
wb.close()
if __name__ == "__main__":
#๋ฐ์ดํฐ 1000๊ฐ์ ๋ ๋ฃ๊ธฐ
for i in range(1,1000):
test = Test(i, str(i) + '์ด๋ฆ')
insert_test(test)
#DB -> ์์
ํ์ผ
select_all_to_excel()
-๊ฒฐ๊ณผ
์ ํ์ด ์์ ํ์ผ๋ก ์ด์์์ด ๋ง๋ค์ด์ง ๊ฒ์ ํ์ธํ๋ค.
์์ ํ์ผ MySQL DB Insert
์ด๋ฒ์๋ ๋ฐ๋๋ก ์์
ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ MySQL DB๋ก Insertํ ๊ฑฐ๋ค.
์์
ํ์ผ์ ์ด์ด 30๊ฐ์ ๋ฐ์ดํฐ๋ง ๋จ๊ธฐ๊ณ ํ์ผ์ ์ ์ฅํ๋ค.
์์์ ์์ฑํ ํจ์๋ก ํ์ฌ DB์ ๋ค์ด์๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํ ํ
์์
ํ์ผ์ DB๋ก Insertํด๋ณด์.
iter๋ฅผ ์ฌ์ฉํ ์ด์ ๋ ์์
ํ์ผ์ ์ฒซ๋ฒ์งธ ํ์ ๋นผ๊ณ ๋ฐ๋ณต๋ฌธ์ ๋๋ฆด๋ ค๊ณ ์ฌ์ฉํ๋ค.
#์์
ํ์ผ DB Insert
def insert_excel_to_db():
conn = pymysql.connect(host='localhost', user='root', password='๋น๋ฐ๋ฒํธ', db='python', charset='utf8')
try:
with conn.cursor() as curs:
sql = 'insert into test values(%s, %s)'
wb = load_workbook('/Users/Jamong/Desktop/์ซ์.xlsx',data_only=True)
ws = wb['Sheet']
iter_rows = iter(ws.rows)
next(iter_rows)
for row in iter_rows:
curs.execute(sql, (row[0].value, row[1].value))
conn.commit()
finally:
conn.close()
wb.close()
if __name__ == "__main__":
delete_all()
insert_excel_to_db()
select_all()
-๊ฒฐ๊ณผ
select_allํจ์๋ฅผ ์ด์ฉํด์ ํ์ฌ DB์ ๋ชฉ๋ก์ Selectํด๋ณด๋ ์์ฑํ ์์
๋ฐ์ดํฐ๊ฐ ์ด์์์ด Insert๋๊ฒ์ ํ์ธํ๋ค.
๋๊ธ