본문 바로가기
DataBase

4-2. DB를 활용한 단어장 만들기

by 사라리24 2024. 3. 28.
SMALL

 

# 단어, 뜻, 레벨 찾아서 가져오는 클래스

class Words:
    def __init__(self, eng, kor, lev=1):
        self.eng = eng
        self.kor = kor
        self.lev = lev
    def setEng(self, eng):
        self.eng = eng
    def getEng(self):
        return self.eng
    def setKor(self, kor):
        self.kor = kor
    def getKor(self):
        return self.kor
    def setLev(self, lev):
        self.lev = lev
    def getLev(self):
        return self.lev
    

    def getLev(self):
        return self.lev

 

 

 

 

###### db 연결/해제시켜주는 클래스

class WordsDao:
    def __init__(self):
        self.db = None
        
    def connect(self):
        self.db = MySQLdb.connect('localhost','root','1234','kdt')
        
    def disconnect(self):
        self.db.close()

    def insert(self, word): # word 객체 받기   영단어 뜻가져오기
        self.connect() # db연결하기 
        cur = self.db.cursor() # 커서 만들기 (전역db를 커서에 넣기)
        sql = 'insert into voca (eng, kor, lev) values (%s, %s, %s)'
        data = (word.getEng(), word.getKor(), word.getLev()) #객체에 넣어놨던 것들을 가져오기
        cur.execute(sql,data)
        self.db.commit()
        cur.close()
        self.disconnect()

    def selectAll(self):
        self.connect()
        cur = self.db.cursor(MySQLdb.cursors.DictCursor)
        sql = 'select eng, kor, lev from voca order by eng asc'
        cur.execute(sql)
        row = cur.fetchall()
        cur.close()
        self.disconnect()
        return row

    def search(self, eng):
        self.connect()
        cur = self.db.cursor(MySQLdb.cursors.DictCursor)
        # select eng, kor, lev from voca where eng like '%pp%';
        # sql = select eng, kor, lev from voca where eng = %s
        # sql = """select eng, kor, lev from voca where eng like '%%s%'"""
        sql = "select eng, kor, lev from voca where eng like concat('%%', %s, '%%')"
        data = (eng,)
        cur.execute(sql, data)
        row = cur.fetchall()
        cur.close()
        self.disconnect()
        return row

            
    def update(self, word):
        self.connect()
        cur = self.db.cursor()
        sql = 'update voca set Kor=%s, lev=%s where eng=%s'
        data = (word.getKor(), word.getLev(), word.getEng())
        result = cur.execute(sql,data)
        self.db.commit()
        if result > 0:
            print('수정되었습니다.')
        else:
            print('에러!')
        cur.close()
        self.disconnect()

    def delect(self, eng):
        self.connect()
        cur = self.db.cursor()
        sql = 'delete from voca where eng = %s'
        data = (eng,)
        result = cur.execute(sql, data)
        self.db.commit()
        if result > 0 :
            print('삭제되었습니다.')
        else:
            print('오류!')
        cur.close()
        self.disconnect()

 

# 서비스

class WordsService:
    def __init__(self):
        self.dao = WordsDao()
        
    def insertWord(self):
        eng = input('단어를 입력하세요')
        kor = input('뜻을 입력하세요')
        lev = input('레벨을 입력하세요')
        word = Words(eng, kor, lev)
        self.dao.insert(word)
        
    def printAll(self):
        datas = self.dao.selectAll()
        for data in datas:
            print(f"{data['eng']}, 뜻: {data['kor']}, 레벨:{data['lev']}")
            
    def searchWord(self):
        eng = input('검색할 단어를 입력하세요.') #검색할 단어 입력받기
        datas = self.dao.search(eng)
        if datas:
            for data in datas:
                print(f"{data['eng']}, 뜻: {data['kor']}, 레벨:{data['lev']}")
        else :
            print('찾는 단어가 없습니다.')

    def editWord(self):
        eng = input('수정할 단어를 입력하세요.')
        word = self.dao.search(eng)
        if not word:
            print('수정할 단어가 없습니다.')
        else:
            kor = input('새로운 뜻을 입력하세요.')
            lev = input('새로운 레벨을 입력하세요.')
            word = Words(eng, kor, lev)
            self.dao.update(word)
    
    def delWord(self):
        eng = input('삭제할 단어를 입력하세요.')
        word = self.dao.search(eng)
        if not word:
            print('삭제할 단어가 없습니다.')
        else: 
            self.dao.delete(eng)
start = Menu()
start.run()