1. MySQLdb 라이브러리 import
import MySQLdb
2. DTO (Data Transfer Object)
*DTO란?
- DataTransferObject의 약자
- 통신할 때 묶어서 사용되는 데이터의 묶음 상자
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
3. DAO (Data Access Object)
*DAO란?
- DataAccessObject의 약자
- connection 생성, 끊기
- CRUD(등록, 조회, 수정, 삭제) 기능
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):
pass
def selectAll(self):
pass
def search(self, eng):
pass
def update(self, word):
pass
def delete(self, eng):
pass
4. 서비스 (Service) Class
메인 코드라고 볼 수 있는 실제 비지니스 로직이 담겨있는 클래스
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('검색할 단어를 입력하세요.').strip()
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('수정할 단어를 입력하세요').strip()
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)
→ 메인 로직이 정해졌으니 위 DAO 클래스의 내용을 정의한다.
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):
self.connect()
cur = self.db.cursor()
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)
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 delete(self, eng):
self.connect()
cur = self.db.cursor()
sql = 'delete from voca where eng = %s'
result = cur.execute(sql, (eng, ))
self.db.commit()
if result > 0:
print('삭제되었습니다')
else:
print('에러!')
cur.close()
self.disconnect()
5. 메인 코드
class Menu:
def __init__(self):
self.service = WordsService()
def run(self):
while True:
try:
menu = int(input('1.등록 2.출력 3.검색 4.수정 5.삭제 6.종료').strip())
if menu == 1:
self.service.insertWord()
elif menu == 2:
self.service.printAll()
elif menu == 3:
self.service.searchWord()
elif menu == 4:
self.service.editWord()
elif menu == 5:
self.service.delWord()
elif menu == 6:
print('프로그램을 종료합니다.')
break
except Exception as e:
print(e)
menu = Menu()
menu.run() # 메인코드인 무한루프가 시작된다.
'Python > 개요 및 문법' 카테고리의 다른 글
개요 (1) | 2024.10.15 |
---|---|
파이썬과 MySQL 연동 (1) | 2024.10.14 |
디렉토리 관리 프로그래밍 (1) | 2024.10.07 |
파일 입출력 모드 (4) | 2024.10.02 |
변수 타입 어노테이션 (1) | 2024.10.02 |