[SQLite] SQLite를 이용한 파이썬 프로그램 만들기 2
오늘은 SQLite를 이용한 파이썬 프로그램을 만들어보는 방법을 알아보도록 하겠습니다!
우선, 이전 게시글에서 SQLite를 설치하고 데이터베이스 작업을 완료 하신 후 진행해 주시길 바랍니다.
저는, "올림픽 경기 기록 관리 프로그램"을 만들어 보았습니다!Console로 진행하면 아주 쉽겠지만, 시각적인 효과를 덧붙이기 위해 tkinter를 사용하였습니다.
저의 프로그램은 간단하게 "메인화면 - 기록보기 - 기록추가 - 기록수정 - 기록삭제 - 메달순위" 로 구성되어 있습니다!
각 파일들은 객체지향을 사용하여 만들어졌고, 파일 내에서 SQL문을 다루는 형식으로 진행하였습니다.
1. 메인 화면 : 프로그램 이름을 띄워주고, 각 버튼을 눌러 원하는 메뉴로 갈 수 있도록 실행해보았습니다.
import sqlite3
from tkinter import *
from PIL import ImageTk, Image
import record_show2 as show
import record_create2 as create
import record_update2 as update
import record_delete2 as delete
import record_medal2 as medal
class Main:
def __init__(m):
m.root = Tk()
m.root.title("올림픽 경기 기록 관리 프로그램")
m.root.geometry('600x700')
m.i_image = ImageTk.PhotoImage(Image.open("./olympic.png"))
m.l_image = Label(m.root, image=m.i_image)
m.l_title = Label(m.root, text="올림픽 경기 기록 관리 프로그램", font=("Nanum","30"),pady=30,background='#2f3640',foreground='white')
m.b_show = Button(m.root, text = "기록 보기", command =m.show, width=15, height=5)
m.b_create = Button(m.root, text = "기록 추가", command = m.create, width=15, height=5)
m.b_update = Button(m.root, text = "기록 수정", command = m.update, width=15, height=5)
m.b_delete = Button(m.root, text = "기록 삭제", command = m.delete, width=15, height=5)
m.b_medal = Button(m.root, text = "메달 순위", command = m.medal, width=15, height=5)
def setup(m):
m.l_image.grid(row=0,column=2)
m.l_title.grid(row=1,column=2)
m.b_show.grid(row=3)
m.b_create.grid(row=4)
m.b_update.grid(row=5)
m.b_delete.grid(row=6)
m.b_medal.grid(row=7)
def show(m):
show.Show().run()
def create(m):
create.Create().run()
def update(m):
update.Update().run()
def delete(m):
delete.Delete().run()
def medal(m):
medal.Medal().run()
def run(m):
m.setup()
m.root.mainloop()
if __name__ == '__main__':
Main().run()
2. 기록 추가
: 각 항목에 해당하는 정보들을 입력하고, Click 버튼을 누르면 데이터베이스에 저장되는 형식으로 진행하였습니다.

import sqlite3
from tkinter import *
from PIL import ImageTk, Image
class Create:
def __init__(c):
c.root = Toplevel()
c.root.title("올림픽 경기 기록 보기")
c.root.geometry('850x700')
c.l_title = Label(c.root, text="올림픽 경기 기록 추가", font=("Nanum","30"),pady=30,background='#2f3640',foreground='white')
c.l_country = Label(c.root, text="Country", font=("AppleGothic","20"))
c.r_country = StringVar()
c.r_country1=Radiobutton(c.root, text="korea", value='korea', variable=c.r_country, font=("AppleGothic","15"))
c.r_country2=Radiobutton(c.root, text="china", value='china', variable=c.r_country, font=("AppleGothic","15"))
c.r_country3=Radiobutton(c.root, text="japan", value='japan', variable=c.r_country, font=("AppleGothic","15"))
c.l_sport = Label(c.root, text="Sport", font=("AppleGothic","20"))
c.r_sport = StringVar()
c.r_sport1=Radiobutton(c.root, text="basketball", value='basketball', variable=c.r_sport, font=("AppleGothic","15"))
c.r_sport2=Radiobutton(c.root, text="baseball", value='baseball', variable=c.r_sport, font=("AppleGothic","15"))
c.r_sport3=Radiobutton(c.root, text="football", value='football', variable=c.r_sport, font=("AppleGothic","15"))
c.l_gender = Label(c.root, text="Gender", font=("AppleGothic","20"))
c.r_gender = StringVar()
c.r_gender1=Radiobutton(c.root, text="Men", value='men', variable=c.r_gender, font=("AppleGothic","15"))
c.r_gender2=Radiobutton(c.root, text="Women", value='women', variable=c.r_gender, font=("AppleGothic","15"))
c.r_gender3=Radiobutton(c.root, text="Mixed", value='mixed', variable=c.r_gender, font=("AppleGothic","15"))
c.l_athlete = Label(c.root, text="Athlete", font=("AppleGothic","20"))
c.e_athlete = Entry(c.root)
c.l_rank = Label(c.root, text="Rank", font=("AppleGothic","20"))
c.e_rank = Entry(c.root)
c.b_start = Button(c.root, text = "Click", font=("Nanum","20"),pady=20,padx=20,command = c.submit)
c.submit_sport = StringVar()
c.submit_country = StringVar()
c.submit_gender = StringVar()
c.submit_athlete = StringVar()
c.submit_rank = IntVar()
def setup(c):
c.l_title.grid(row=1,column=3)
c.l_country.grid(row=2,column=0)
c.r_country1.grid(row=3,column=0)
c.r_country2.grid(row=4,column=0)
c.r_country3.grid(row=5,column=0)
c.l_sport.grid(row=2,column=1)
c.r_sport1.grid(row=3,column=1)
c.r_sport2.grid(row=4,column=1)
c.r_sport3.grid(row=5,column=1)
c.l_gender.grid(row=2,column=2)
c.r_gender1.grid(row=3,column=2)
c.r_gender2.grid(row=4,column=2)
c.r_gender3.grid(row=5,column=2)
c.l_athlete.grid(row=2,column=3)
c.e_athlete.grid(row=3,column=3)
c.l_rank.grid(row=2,column=4)
c.e_rank.grid(row=3,column=4)
c.b_start.grid(row=4,column=5)
def submit(c):
c.submit_sport.set(c.r_sport.get())
c.submit_country.set(c.r_country.get())
c.submit_gender.set(c.r_gender.get())
c.submit_athlete.set(c.e_athlete.get())
c.submit_rank.set(c.e_rank.get())
c.insert()
def insert(c):
c.conn = sqlite3.connect("/Users/hyerm2/Desktop/Lab/Project5/Olympics.db")
c.cur = c.conn.cursor()
c.record = (str(c.submit_country.get()), str(c.submit_sport.get()), str(c.submit_gender.get()),str(c.submit_athlete.get()),int(c.submit_rank.get()))
c.ins_sql = 'insert into Record (country,sport,gender,athlete,rank) values(?,?,?,?,?)'
c.cur.execute(c.ins_sql, c.record)
c.conn.commit()
c.conn.close()
def run(c):
c.setup()
c.root.mainloop()
if __name__ == '__main__':
Create().run()
3. 기록 수정
: 각 기록만의 고유한 id가 자동적으로 생성이 되는데, 수정을 원하는 기록의 Id를 입력하고 해당 파트를 선정후 수정할 내용을 입력하면 자동적으로 기록이 수정 됩니다!

import sqlite3
from tkinter import *
from PIL import ImageTk, Image
class Update:
def __init__(u):
u.root = Toplevel()
u.root.title("올림픽 경기 기록 수정")
u.root.geometry('850x700')
u.l_title = Label(u.root, text="올림픽 경기 기록 수정", font=("Nanum","30"),pady=30,background='#2f3640',foreground='white')
u.l_id = Label(u.root, text="Update ID", font=("AppleGothic","20"))
u.e_id = Entry(u.root)
u.l_part = Label(u.root, text="Update Part", font=("AppleGothic","20"))
u.r_part = StringVar()
u.r_part1=Radiobutton(u.root, text="country", value='country', variable=u.r_part, font=("AppleGothic","15"))
u.r_part2=Radiobutton(u.root, text="sport", value='sport', variable=u.r_part, font=("AppleGothic","15"))
u.r_part3=Radiobutton(u.root, text="gender", value='gender', variable=u.r_part, font=("AppleGothic","15"))
u.r_part4=Radiobutton(u.root, text="athlete", value='athlete', variable=u.r_part, font=("AppleGothic","15"))
u.r_part5=Radiobutton(u.root, text="rank", value='rank', variable=u.r_part, font=("AppleGothic","15"))
u.l_content = Label(u.root, text="Update Content", font=("AppleGothic","20"))
u.e_content = Entry(u.root)
u.b_start = Button(u.root, text = "Click", font=("Nanum","20"),pady=20,padx=20, command = u.submit)
u.submit_id = IntVar()
u.submit_part = StringVar()
u.submit_content = StringVar()
def setup(u):
u.l_title.grid(row=1,column=2)
u.l_id.grid(row=2,column=0)
u.e_id.grid(row=3,column=0)
u.l_part.grid(row=2,column=1)
u.r_part1.grid(row=3,column=1)
u.r_part2.grid(row=4,column=1)
u.r_part3.grid(row=5,column=1)
u.r_part4.grid(row=6,column=1)
u.r_part5.grid(row=7,column=1)
u.l_content.grid(row=2,column=2)
u.e_content.grid(row=3,column=2)
u.b_start.grid(row=4,column=3)
def submit(u):
u.submit_id.set(u.e_id.get())
u.submit_part.set(u.r_part.get())
u.submit_content.set(u.e_content.get())
u.update()
def update(u):
u.conn = sqlite3.connect("/Users/hyerm2/Desktop/Lab/Project5/Olympics.db")
u.cur = u.conn.cursor()
if str(u.submit_part.get())=='rank':
u.ins_sql = 'update Record set '+ str(u.submit_part.get())+' = '+str(u.submit_content.get())+' where id = '+str(u.submit_id.get())
else:
u.ins_sql = 'update Record set '+ str(u.submit_part.get())+' = \''+str(u.submit_content.get())+'\' where id = '+str(u.submit_id.get())
print(u.ins_sql)
u.cur.execute(u.ins_sql)
u.conn.commit()
u.conn.close()
def run(u):
u.setup()
u.root.mainloop()
if __name__ == '__main__':
Update().run()
4. 기록 삭제
: 원하는 기록을 삭제하기 위해서, 다양한 part의 정보를 넣을 수 있도록 하였습니다.
예를 들어, rank가 5 이하인 japan의 기록들을 삭제하고 싶다면, Country에 japan을 클릭, Rank에 <5를 클릭하면 됩니다!
import sqlite3
from tkinter import *
from PIL import ImageTk, Image
class Delete:
def __init__(d):
d.root = Toplevel()
d.root.title("올림픽 경기 기록 삭제")
d.root.geometry('1150x700')
d.l_title = Label(d.root, text="올림픽 경기 기록 삭제", font=("Nanum","30"),pady=30,background='#2f3640',foreground='white')
d.l_id= Label(d.root, text="Id", font=("AppleGothic","20"))
d.r_id = StringVar()
d.r_id1=Radiobutton(d.root, text="=", value='=', variable=d.r_id, font=("AppleGothic","15"))
d.r_id2=Radiobutton(d.root, text="<", value='<', variable=d.r_id, font=("AppleGothic","15"))
d.r_id3=Radiobutton(d.root, text=">", value='>', variable=d.r_id, font=("AppleGothic","15"))
d.e_id = Entry(d.root)
d.l_country = Label(d.root, text="Country", font=("AppleGothic","20"))
d.r_country = StringVar()
d.r_country1=Radiobutton(d.root, text="korea", value='korea', variable=d.r_country, font=("AppleGothic","15"))
d.r_country2=Radiobutton(d.root, text="china", value='china', variable=d.r_country, font=("AppleGothic","15"))
d.r_country3=Radiobutton(d.root, text="japan", value='japan', variable=d.r_country, font=("AppleGothic","15"))
d.l_sport = Label(d.root, text="Sport", font=("AppleGothic","20"))
d.r_sport = StringVar()
d.r_sport1=Radiobutton(d.root, text="basketball", value='basketball', variable=d.r_sport, font=("AppleGothic","15"))
d.r_sport2=Radiobutton(d.root, text="baseball", value='baseball', variable=d.r_sport, font=("AppleGothic","15"))
d.r_sport3=Radiobutton(d.root, text="football", value='football', variable=d.r_sport, font=("AppleGothic","15"))
d.l_gender = Label(d.root, text="Gender", font=("AppleGothic","20"))
d.r_gender = StringVar()
d.r_gender1=Radiobutton(d.root, text="Men", value='men', variable=d.r_gender, font=("AppleGothic","15"))
d.r_gender2=Radiobutton(d.root, text="Women", value='women', variable=d.r_gender, font=("AppleGothic","15"))
d.r_gender3=Radiobutton(d.root, text="Mixed", value='mixed', variable=d.r_gender, font=("AppleGothic","15"))
d.l_athlete = Label(d.root, text="Athlete", font=("AppleGothic","20"))
d.e_athlete = Entry(d.root)
d.l_rank = Label(d.root, text="Rank", font=("AppleGothic","20"))
d.r_rank = StringVar()
d.r_rank1=Radiobutton(d.root, text="=", value='=', variable=d.r_rank, font=("AppleGothic","15"))
d.r_rank2=Radiobutton(d.root, text="<", value='<', variable=d.r_rank, font=("AppleGothic","15"))
d.r_rank3=Radiobutton(d.root, text=">", value='>', variable=d.r_rank, font=("AppleGothic","15"))
d.e_rank = Entry(d.root)
d.b_start = Button(d.root, text = "Click", font=("Nanum","20"),pady=20,padx=20, command = d.submit)
d.submit_id1 = StringVar()
d.submit_id2 = StringVar()
d.submit_sport = StringVar()
d.submit_country = StringVar()
d.submit_gender = StringVar()
d.submit_athlete = StringVar()
d.submit_rank1 = StringVar()
d.submit_rank2 = StringVar()
def setup(d):
d.l_title.grid(row=1,column=4)
d.l_id.grid(row=2,column=0)
d.r_id1.grid(row=3,column=0)
d.r_id2.grid(row=4,column=0)
d.r_id3.grid(row=5,column=0)
d.e_id.grid(row=6,column=0)
d.l_country.grid(row=2,column=1)
d.r_country1.grid(row=3,column=1)
d.r_country2.grid(row=4,column=1)
d.r_country3.grid(row=5,column=1)
d.l_sport.grid(row=2,column=2)
d.r_sport1.grid(row=3,column=2)
d.r_sport2.grid(row=4,column=2)
d.r_sport3.grid(row=5,column=2)
d.l_gender.grid(row=2,column=3)
d.r_gender1.grid(row=3,column=3)
d.r_gender2.grid(row=4,column=3)
d.r_gender3.grid(row=5,column=3)
d.l_athlete.grid(row=2,column=4)
d.e_athlete.grid(row=3,column=4)
d.l_rank.grid(row=2,column=5)
d.r_rank1.grid(row=3,column=5)
d.r_rank2.grid(row=4,column=5)
d.r_rank3.grid(row=5,column=5)
d.e_rank.grid(row=6,column=5)
d.b_start.grid(row=3,column=6)
def submit(d):
d.submit_id1.set(d.r_id.get())
d.submit_id2.set(d.e_id.get())
d.submit_sport.set(d.r_sport.get())
d.submit_country.set(d.r_country.get())
d.submit_gender.set(d.r_gender.get())
d.submit_athlete.set(d.e_athlete.get())
d.submit_rank1.set(d.r_rank.get())
d.submit_rank2.set(d.e_rank.get())
d.delete()
def delete(d):
d.conn = sqlite3.connect("/Users/hyerm2/Desktop/Lab/Project5/Olympics.db")
d.cur = d.conn.cursor()
d.ins_sql = 'delete from Record where '
d.part_list = ['id','country','sport','gender','athlete','rank']
d.record_list = []
d.sql_list = []
d.record_list.append(str(d.submit_id1.get()))
d.record_list.append(str(d.submit_id2.get()))
d.record_list.append(str(d.submit_country.get()))
d.record_list.append(str(d.submit_sport.get()))
d.record_list.append(str(d.submit_gender.get()))
d.record_list.append(str(d.submit_athlete.get()))
d.record_list.append(str(d.submit_rank1.get()))
d.record_list.append(str(d.submit_rank2.get()))
d.record = ""
for d.i in range(len(d.part_list)):
if d.part_list[d.i] == 'id':
if not(d.record_list[d.i] == ''):
string = d.part_list[d.i] + d.record_list[d.i] + d.record_list[d.i+1]
d.sql_list.append(string)
elif d.part_list[d.i] == 'rank':
if not(d.record_list[d.i+1] == ''):
string = d.part_list[d.i] + d.record_list[d.i+1] + d.record_list[d.i+2]
d.sql_list.append(string)
else:
if not(d.record_list[d.i+1] == ''):
string = d.part_list[d.i] + ' = \'' + d.record_list[d.i+1] + '\''
d.sql_list.append(string)
for d.i in range(len(d.sql_list)):
if d.i == 0:
d.ins_sql = d.ins_sql + d.sql_list[d.i]
else:
d.ins_sql = d.ins_sql + ' and '+d.sql_list[d.i]
print(d.ins_sql)
d.cur.execute(d.ins_sql)
d.conn.commit()
d.conn.close()
def run(d):
d.setup()
d.root.mainloop()
if __name__ == '__main__':
Delete().run()
5. 기록 보기
: 원하는 나라의, 원하는 종목의, 원하는 선수의 기록을 선택적으로 볼 수 있게 각 Part별로 나누어 선택 가능하게 하였습니다.

import sqlite3
from tkinter import *
from PIL import ImageTk, Image
class Show:
def __init__(s):
s.root = Toplevel()
s.root.title("올림픽 경기 기록 보기")
s.root.geometry('850x700')
s.l_title = Label(s.root, text="올림픽 경기 기록 보기", font=("Nanum","30"),pady=30,background='#2f3640',foreground='white')
s.l_country = Label(s.root, text="Country", font=("AppleGothic","20"))
s.r_country = StringVar()
s.r_country1=Radiobutton(s.root, text="korea", value='korea', variable=s.r_country, font=("AppleGothic","15"))
s.r_country2=Radiobutton(s.root, text="china", value='china', variable=s.r_country, font=("AppleGothic","15"))
s.r_country3=Radiobutton(s.root, text="japan", value='japan', variable=s.r_country, font=("AppleGothic","15"))
s.l_sport = Label(s.root, text="Sport", font=("AppleGothic","20"))
s.r_sport = StringVar()
s.r_sport1=Radiobutton(s.root, text="basketball", value='basketball', variable=s.r_sport, font=("AppleGothic","15"))
s.r_sport2=Radiobutton(s.root, text="baseball", value='baseball', variable=s.r_sport, font=("AppleGothic","15"))
s.r_sport3=Radiobutton(s.root, text="football", value='football', variable=s.r_sport, font=("AppleGothic","15"))
s.l_gender = Label(s.root, text="Gender", font=("AppleGothic","20"))
s.r_gender = StringVar()
s.r_gender1=Radiobutton(s.root, text="Men", value='men', variable=s.r_gender, font=("AppleGothic","15"))
s.r_gender2=Radiobutton(s.root, text="Women", value='women', variable=s.r_gender, font=("AppleGothic","15"))
s.r_gender3=Radiobutton(s.root, text="Mixed", value='mixed', variable=s.r_gender, font=("AppleGothic","15"))
s.l_athlete = Label(s.root, text="Athlete", font=("AppleGothic","20"))
s.e_athlete = Entry(s.root)
s.l_rank = Label(s.root, text="Rank", font=("AppleGothic","20"))
s.r_rank = StringVar()
s.r_rank1=Radiobutton(s.root, text="=", value='=', variable=s.r_rank, font=("AppleGothic","15"))
s.r_rank2=Radiobutton(s.root, text="<", value='<', variable=s.r_rank, font=("AppleGothic","15"))
s.r_rank3=Radiobutton(s.root, text=">", value='>', variable=s.r_rank, font=("AppleGothic","15"))
s.e_rank = Entry(s.root)
s.b_start = Button(s.root, text = "Click", font=("Nanum","20"),pady=20,padx=20,command = s.submit)
s.submit_sport = StringVar()
s.submit_country = StringVar()
s.submit_gender = StringVar()
s.submit_athlete = StringVar()
s.submit_rank1 = StringVar()
s.submit_rank2 = StringVar()
s.l_showid = Label(s.root, text="Id")
s.l_showcountry = Label(s.root, text="Country")
s.l_showsport = Label(s.root, text="Sport")
s.l_showgender = Label(s.root, text="Gender")
s.l_showathlete = Label(s.root, text="Athlete")
s.l_showrank = Label(s.root, text="Rank")
def setup(s):
## s.l_image.grid(row=0,column=5)
s.l_title.grid(row=1,column=6)
s.l_country.grid(row=2,column=2)
s.r_country1.grid(row=3,column=2)
s.r_country2.grid(row=4,column=2)
s.r_country3.grid(row=5,column=2)
s.l_sport.grid(row=2,column=3)
s.r_sport1.grid(row=3,column=3)
s.r_sport2.grid(row=4,column=3)
s.r_sport3.grid(row=5,column=3)
s.l_gender.grid(row=2,column=4)
s.r_gender1.grid(row=3,column=4)
s.r_gender2.grid(row=4,column=4)
s.r_gender3.grid(row=5,column=4)
s.l_athlete.grid(row=2,column=6)
s.e_athlete.grid(row=3,column=6)
s.l_rank.grid(row=2,column=7)
s.r_rank1.grid(row=3,column=7)
s.r_rank2.grid(row=4,column=7)
s.r_rank3.grid(row=5,column=7)
s.e_rank.grid(row=6,column=7)
s.b_start.grid(row=4,column=8)
def showlist(s):
s.l_showid.grid(row=6,column=0)
s.l_showcountry.grid(row=6,column=1)
s.l_showsport.grid(row=6,column=2)
s.l_showgender.grid(row=6,column=3)
s.l_showathlete.grid(row=6,column=4)
s.l_showrank.grid(row=6,column=5)
s.index=6
def submit(s):
s.submit_country.set(s.r_country.get())
s.submit_sport.set(s.r_sport.get())
s.submit_gender.set(s.r_gender.get())
s.submit_athlete.set(s.e_athlete.get())
s.submit_rank1.set(s.r_rank.get())
s.submit_rank2.set(s.e_rank.get())
s.show()
## SELECT * FROM sqlite_master WHERE type='table'
def showdata(s):
s.l_dataid = Label(s.root, text=s.data_list[0])
s.l_datacountry = Label(s.root, text=s.data_list[1])
s.l_datasport = Label(s.root, text=s.data_list[2])
s.l_datagender = Label(s.root, text=s.data_list[3])
s.l_dataathlete = Label(s.root, text=s.data_list[4])
s.l_datarank = Label(s.root, text=s.data_list[5])
s.index = s.index+1
s.showgrid()
def showgrid(s):
s.l_dataid.grid(row=s.index,column=0)
s.l_datacountry.grid(row=s.index,column=1)
s.l_datasport.grid(row=s.index,column=2)
s.l_datagender.grid(row=s.index,column=3)
s.l_dataathlete.grid(row=s.index,column=4)
s.l_datarank.grid(row=s.index,column=5)
def show(s):
s.conn = sqlite3.connect("/Users/hyerm2/Desktop/Lab/Project5/Olympics.db")
s.cur = s.conn.cursor()
s.ins_sql = 'select * from Record where '
s.part_list = ['country','sport','gender','athlete','rank']
s.record_list = []
s.sql_list = []
s.count = 0
s.record_list.append(str(s.submit_country.get()))
s.record_list.append(str(s.submit_sport.get()))
s.record_list.append(str(s.submit_gender.get()))
s.record_list.append(str(s.submit_athlete.get()))
s.record_list.append(str(s.submit_rank1.get()))
s.record_list.append(str(s.submit_rank2.get()))
print("list is ",s.record_list)
s.record = ""
for s.i in range(len(s.part_list)):
if s.part_list[s.i] == 'rank':
if not(s.record_list[s.i] == ''):
s.count = 1
s.string = s.part_list[s.i] + s.record_list[s.i] + s.record_list[s.i+1]
s.sql_list.append(s.string)
else:
if not(s.record_list[s.i] == ''):
s.count = 1
s.string = s.part_list[s.i] + ' = \'' + s.record_list[s.i] + '\''
s.sql_list.append(s.string)
if s.count == 0:
s.ins_sql = 'select * from Record'
else:
print("hihi")
for s.i in range(len(s.sql_list)):
if s.i == 0:
s.ins_sql = s.ins_sql + s.sql_list[s.i]
else:
s.ins_sql = s.ins_sql + ' and '+s.sql_list[s.i]
print(s.ins_sql)
s.cur.execute(s.ins_sql)
s.datas = s.cur.fetchall()
s.data_list = []
s.showlist()
for s.data in s.datas:
s.data_list = []
for s.d in s.data:
s.data_list.append(s.d)
print(s.data_list)
s.showdata()
s.conn.close()
def run(s):
s.setup()
s.root.mainloop()
if __name__ == '__main__':
Show().run()
6. 메달 순위
: 버튼을 클릭하면, 메달의 개수에 따라 순위를 알려주는 방식으로 진행하게 되어있습니다.

import sqlite3
from tkinter import *
from PIL import ImageTk, Image
class Medal:
def __init__(m):
m.root = Toplevel()
m.root.title("올림픽 경기 기록 수정")
m.root.geometry('850x700')
m.l_title = Label(m.root, text="올림픽 경기 메달 순위", font=("Nanum","30"),pady=30,background='#2f3640',foreground='white')
m.b_start = Button(m.root, text = "Click", font=("Nanum","20"),pady=20,padx=20, command = m.submit)
m.l_shownum = Label(m.root, text="Num", font=("AppleGothic","20"))
m.l_showcountry = Label(m.root, text="Country", font=("AppleGothic","20"))
m.l_showmedal = Label(m.root, text="Medal", font=("AppleGothic","20"))
def setup(m):
m.l_title.grid(row=1,column=0)
m.b_start.grid(row=1,column=1)
def showlist(m):
m.l_shownum.grid(row=3,column=0)
m.l_showcountry.grid(row=3,column=1)
m.l_showmedal.grid(row=3,column=2)
m.index=3
def submit(m):
m.show()
def showdata(m):
m.l_datashow = Label(m.root, text=m.index-2, font=("AppleGothic","15"))
m.l_datacountry = Label(m.root, text=m.data_list[0], font=("AppleGothic","15"))
m.l_datamedal = Label(m.root, text=m.data_list[1], font=("AppleGothic","15"))
m.index = m.index+1
m.showgrid()
def showgrid(m):
m.l_datashow.grid(row=m.index,column=0)
m.l_datacountry.grid(row=m.index,column=1)
m.l_datamedal.grid(row=m.index,column=2)
def show(m):
m.conn = sqlite3.connect("/Users/hyerm2/Desktop/Lab/Project5/Olympics.db")
m.cur = m.conn.cursor()
m.ins_sql = 'select country, count(country) from Record where rank<4 group by country order by count(country) desc'
m.data_list = []
m.cur.execute(m.ins_sql)
m.datas = m.cur.fetchall()
m.showlist()
for m.data in m.datas:
m.data_list = []
for m.d in m.data:
m.data_list.append(m.d)
m.showdata()
m.conn.close()
def run(m):
m.setup()
m.root.mainloop()
if __name__ == '__main__':
Medal().run()