pymysql 라이브러리 설치
파이썬 코드에서 MySQL을 사용하기 위해서는 pymysql이라는 라이브러리를 설치해야 한다. 아래와 같은 명령을 콘솔 창에 입력하면 설치가 가능하다.
pip install pymysaql
만약에 pip 명령어를 찾을 수 없다면 install 시에 환경 변수를 등록하지 않았기 때문이다.
python3.8의 경우는 아래와 같다.
C:\Users\계정\AppData\Local\Programs\Python\Python38
C:\Users\계정\AppData\Local\Programs\Python\Python38\Scripts
환경 변수에 아래와 같은 경로를 추가하면 된다.
Python을 사용한 MySQL DB에 데이터 추가하기
MySQL WorkBench등을 이용하여 Database를 만든다.
CREATE DATABASE memberDB; // memberDB 데이터베이스 생성
CREATE TABLE userTable ( // userTable 테이블 생성
userID VARCHAR(20) PRIMARY KEY,
userName VARCHAR(20) NOT NULL,
userEMail VARCHAR(20) NOT NULL,
userBirth VARCHAR(20) NOT NULL
);
python 코딩 순서는
데이터베이스 연결 → 커서 생성 → 테이블 만들기 → 데이터 입력 → 데이터 저장 → 데이터베이스 닫기
로 진행한다. ( 테이블은 코드 밖에서 미리 만들었다. )
import pymysql
# global variables
conn, cur = None, None
data1, data2, data3, data4 = "", "", "", ""
sql = ""
# connect database
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234', db='membertbl', charset='utf8')
# create cursor
cur = conn.cursor()
while (True) :
data1 = input("사용자 ID >>")
if data1 == "" :
break
data2 = input("사용자 이름 >>")
data3 = input("사용자 이메일 >>")
data4 = input("사용자 출생년도 >>")
# sql script (DML, Data Manipulation Language) : INSERT
sql = "INSERT INTO userTable VALUES('" + data1 + "','" + data2 + "','" + data3 + "','" + data4 + "')"
cur.execute(sql)
conn.commit()
conn.close()
ID 입력 시 그냥 엔터를 치면 사용자 입력을 종료하게 된다.
입력창은 아래와 같이 나오며, 멤버를 추가하자.
입력 후에는 DB에 아래와 같은 명령을 내리면, 추가된 Jerry를 확인할 수 있다.
SELECT * FROM userTable;
Python을 사용한 MySQL DB에 데이터 조회하기
MySQL Workbench에서 검색하던 데이터를 python으로 조회해 보자. 조회는 아래의 순서대로 한다.
데이터베이스 연결 → 커서 생성 → 데이터 조회 → 데이터 출력 → 데이터베이스 닫기
import pymysql
# global variables
conn, cur = None, None
data1, data2, data3, data4 = "", "", "", ""
row = None
# connect database
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234', db='memberDB', charset='utf8')
# create cursor
cur = conn.cursor()
# sql script (DML, Data Manipulation Language) : SELECT
cur.execute("SELECT * FROM userTable")
print("사용자ID 사용자이름 이메일 출생년도")
print("-----------------------------------------------------------")
while (True) :
row = cur.fetchone()
if row == None :
break
data1 = row[0]
data2 = row[1]
data3 = row[2]
data4 = row[3]
print("%s %10s %25s %10s" % (data1, data2, data3, data4))
conn.close()
위와 같은 결과를 얻을 수 있다.
Python GUI를 이용한 DB 입력/조회 프로그램
에디터 박스, 버튼, 리스트 박스를 이용해서 해당 프로그램을 만들어 보자.
import pymysql
from tkinter import *
from tkinter import messagebox
#INSERT FUNC.
def insertData() :
con, cur = None, None
data = [""] * 4
sql = ""
# connect database
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234', db='memberDB', charset='utf8')
# create cursor
cur = conn.cursor()
data[0] = edit1.get(); data[1] = edit2.get(); data[2] = edit3.get(); data[3] = edit4.get()
try :
# sql script (DML, Data Manipulation Language) : INSERT
sql = "INSERT INTO userTable VALUES('" + data[0] + "','" + data[1] + "','" + data[2] + "','" + data[3] + "')"
print(sql)
cur.execute(sql)
except :
messagebox.showerror('오류', '데이터 입력 오류가 발생함')
else:
messagebox.showinfo('성공', '데이터 입력 성공')
conn.commit()
conn.close()
#SELECT FUNC.
def selectData() :
strData1 = []
strData2 = []
strData3 = []
strData4 = []
# connect database
conn = pymysql.connect(host='127.0.0.1', user='root', password='1234', db='memberDB', charset='utf8')
# create cursor
cur = conn.cursor()
cur.execute("SELECT * FROM userTable")
strData1.append("사용자ID"); strData2.append("사용자이름"); strData3.append("이메일"); strData4.append("출생년도")
strData1.append("----------"); strData2.append("----------"); strData3.append("----------"); strData4.append("----------")
while (True) :
row = cur.fetchone()
if row == None :
break
strData1.append(row[0]); strData2.append(row[1]); strData3.append(row[2]); strData4.append(row[3])
listData1.delete(0, listData1.size() - 1)
listData2.delete(0, listData2.size() - 1)
listData3.delete(0, listData3.size() - 1)
listData4.delete(0, listData4.size() - 1)
for item1, item2, item3, item4 in zip(strData1, strData2, strData3, strData4) :
listData1.insert(END, item1)
listData2.insert(END, item2)
listData3.insert(END, item3)
listData4.insert(END, item4)
conn.close()
# MAIN
window = Tk()
window.geometry("600x300")
window.title("Database insert/select")
editFrame = Frame(window)
editFrame.pack()
listFrame = Frame(window)
listFrame.pack(side = BOTTOM, fill=BOTH, expand=1)
edit1 = Entry(editFrame, width=10); edit1.pack(side=LEFT, padx=10, pady=10)
edit2 = Entry(editFrame, width=10); edit2.pack(side=LEFT, padx=10, pady=10)
edit3 = Entry(editFrame, width=10); edit3.pack(side=LEFT, padx=10, pady=10)
edit4 = Entry(editFrame, width=10); edit4.pack(side=LEFT, padx=10, pady=10)
btnInsert = Button(editFrame, text="입력", command = insertData)
btnInsert.pack(side=LEFT, padx=10, pady=10)
btnSelect = Button(editFrame, text="조회", command = selectData)
btnSelect.pack(side=LEFT, padx=10, pady=10)
listData1 = Listbox(listFrame, bg = "yellow")
listData1.pack(side=LEFT, fill=BOTH, expand=1)
listData2 = Listbox(listFrame, bg = "yellow")
listData2.pack(side=LEFT, fill=BOTH, expand=1)
listData3 = Listbox(listFrame, bg = "yellow")
listData3.pack(side=LEFT, fill=BOTH, expand=1)
listData4 = Listbox(listFrame, bg = "yellow")
listData4.pack(side=LEFT, fill=BOTH, expand=1)
window.mainloop()
DB에 데이터를 추가하는 insertData() 함수와 DB에서 데이터를 조회하는 selectData() 함수가 있다. 둘 다 DB에 접속해서 Query를 보내는 작업을 한다.
Insert는 Main에서 구현한 4개의 edit 박스를 이용하고, Select는 4개의 listBox를 이용하게 된다.
editbox에 데이터를 입력 후, '입력' 버튼을 누르면 Insert 동작이 진행되며, '조회' 버튼을 누르면 DB의 내용이 listBox에 표시된다.
'Program Language > Python' 카테고리의 다른 글
[Python] CSV 파일 사용하기 (2) | 2021.10.05 |
---|---|
[Python] 그래프 사용하기 (0) | 2021.10.05 |
[Python] 캔버스 사용하기 (0) | 2021.08.30 |
[Python] 대화상자 사용하기 (0) | 2021.08.30 |
[Python] 메뉴 만들기 (0) | 2021.08.30 |