각자의 개발 환경에 맞춰 파이썬 준비
python 3.8.18 // pycharm // anaconda 가상서버 // pymysql 사용
MySQL 워크벤치에서 soloDB 생성
이후로는 파이썬만 사용하기에 워크벤치는 더 이상 사용하지 않는다.
# 전역변수 선언부
conn, cur = None, None
data1, data2, data3, data4 = "", "", "", ""
sql = ""
# 메인 코드
conn = pymysql.connect(host='127.0.0.1', user='root', password='', db='solodb', charset='utf8')
cur = conn.cursor()
while(True):
data1 = input("사용자 ID ==> ")
if data1 == "":
break
data2 = input("사용자 이름 ==> ")
data3 = input("사용자 이메일 ==> ")
data4 = input("사용자 출생연도 ==> ")
sql = "INSERT INTO userTable VALUES('" + data1 +"', '" + data2 + "', '" + data3 + "', " + data4 + ")"
cur.execute(sql)
conn.commit()
conn.close()
# 전역변수 선언부
conn, cur = None, None
data1, data2, data3, data4 = "", "", "", ""
row = None
# 메인 코드
conn = pymysql.connect(host = '127.0.0.1', user = 'root', password='', db='solodb', charset='utf8')
cur = conn.cursor()
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("%5s %8s %20s %8d"%(data1, data2, data3, data4))
conn.close()
tkinter
라이브러리를 사용해 파이썬으로 GUI 만들기
from tkinter import *
root = Tk()
# 이 부분이 화면을 구성하는 코드
root.mainloop()
라벨은 문자를 표현할 수 있는 위젯.
label(부모윈도, 옵션 ...)
from tkinter import *
root = Tk()
root.geometry("300x100")
label1 = Label(root, text="혼공 SQL은")
label2 = Label(root, text="쉽습니다.", font=("궁서체", 30), bg="blue", fg="yellow")
label1.pack()
label2.pack()
root.mainloop()
버튼은 마우스로 클릭하면 지정한 작업이 실행되도록 사용하는 위젯,
Button(부모윈도, 옵션...)
from tkinter import *
from tkinter import messagebox
def clickButton():
messagebox.showinfo('버튼 클릭', '버튼을 눌렀습니다..')
root = Tk()
root.geometry("200x200")
button1 = Button(root, text="여기를 클릭하세요", fg="red", bg="yellow", command=clickButton)
button1.pack(expand = 1)
root.mainloop()
side=LEFT || RIGHT
사용해 정렬padx=픽셀값, pady=픽셀값
사용해 여백 추가 가능MySQL을 연동해 데이터를 입력, 조회 가능한 GUI 만들기
import pymysql
from tkinter import *
from tkinter import messagebox
## INSERT function
def insertData():
conn, cur = None, None
data1, data2, data3, data4 = "","","",""
sql = ""
conn = pymysql.connect(host = '127.0.0.1', user = 'root',
password = '', db = 'solodb', charset='utf8')
cur = conn.cursor()
data1 = edt1.get(); data2 = edt2.get();
data3 = edt3.get(); data4 = edt4.get();
sql = "INSERT INTO userTable VALUES('" + data1 + "', '" + data2 + "', '" + data3 + "', " + data4 + ")"
cur.execute(sql)
conn.commit()
conn.close()
messagebox.showinfo('성공', '데이터 입력 성공')
## SELECT function
def selectData():
strData1, strData2, strData3, strData4 = [], [], [], []
conn = pymysql.connect(host = '127.0.0.1', user = 'root', password = '', db = 'solodb', charset = 'utf8')
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()
## GUI use tkinter
root = Tk()
root.geometry("600x300")
root.title("완전한 GUI 응용 프로그램")
edtFrame = Frame(root)
edtFrame.pack()
listFrame = Frame(root)
listFrame.pack(side = BOTTOM, fill = BOTH, expand = 1)
edt1 = Entry(edtFrame, width = 10)
edt1.pack(side = LEFT, padx = 10, pady = 10)
edt2 = Entry(edtFrame, width = 10)
edt2.pack(side = LEFT, padx = 10, pady = 10)
edt3 = Entry(edtFrame, width = 10)
edt3.pack(side = LEFT, padx = 10, pady = 10)
edt4 = Entry(edtFrame, width = 10)
edt4.pack(side = LEFT, padx = 10, pady = 10)
btnInsert = Button(edtFrame, text = "입력", command = insertData)
btnInsert.pack(side = LEFT, padx = 10, pady = 10)
btnSelect = Button(edtFrame, 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)
root.mainloop()
(1045, "Access denied for user 'root'@'localhost' (using password: NO)")
?????????????????????????????나에게 왜 이런 시련을?????
https://bugs.mysql.com/bug.php?id=100406 공홈 리포트 찾아보니 나와 비슷한 이유로 이 버그를 직면한 사람이 많았다.
그들이 하라는 걸 다 해봤지만 실패했다는 소리
다시 한 번 확인 후 글 수정 예정
눈물 흘리고 있는 사람? = 나