카테고리 없음

[SQLite] SQLite를 이용한 파이썬 프로그램 만들기 2

hyerm_2 2021. 8. 10. 10:12
반응형
SMALL

오늘은 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()

 

 

 

반응형
LIST