[Python MySQL] Python에서 MySQL 연결하고 데이터 조회, 추가하기
Python 설치부터 VSCode, Jupyter, venv설정까지파이썬을 시작하기 앞서가장 중요한 것은 개발환경 설정이다. Python 설치, VSCode 확장 프로그램, venv 가상환경까지 한 번에 등장하다보니각 역할이 무엇인
sdesign416.tistory.com
프로그램을 만들 기 전,
SQL 데이터베이스에 voca테이블을 만들고 시작한다.
create table voca(
eng varchar(50) primary key,
kor varchar(50) not null,
lev int default 1
);
프로그램 설명
프로그램 전체 코드는 MySQL을 활용한 단어장_최종.iptnb 파일을 확인!
아래 실행 흐름 설명도 파일 보면서 확인하기!!
a) 클래스를 역할별로 분리하여 생성
- Word → 단어 데이터 관리
- WordsDAO → 데이터베이스 처리
- WordService → 프로그램 핵심 동작 담당
- Menu → 사용자 인터페이스
b) MySQL 연동
Python에서 MySQL에 접속하여 데이터를 관리한다.
CRUD 기능을 모두 구현하여 프로그램을 만든다.
c) 구현 기능
- 새로운 단어 등록
- 단어장 단어 출력
- 단어 검색
- 단어 수정
- 단어 삭제
- 종료
d) 프로그램 동작 흐름
- 프로그램 시작
- [4]ui용 클래스로 메뉴 출력
- 메뉴 선택
- [3]WordService메서드 호출
- [2]DAO 메서드 호출
- MySQL 실행
- 결과 반환
- 출력
e) 프로그램 제작 순서
[3] WordService 클래스를 중심으로 만든다.
[4] 메뉴에서 [a] 단어 등록 기능을 만들고
WordService.insert_word() 생성 → WordsDAO.insert() 생성 순서로 만들었다.
[1] 단어장 클래스 (class Word)
영어단어(eng), 뜻(kor), 레벨(lev) 정보를 하나의 객체로 묶어 관리한다.
✅생성자를 사용해 단어 객체 생성
def __init__(self, eng, kor, lev=1):
self.eng = eng
self.kor = kor
self.lev = lev
✅ Property를 사용해 데이터 검증 (eng만 예시로 사용)
객체지향을 사용하여
객체 내부의 데이터를 외부에선 변경하지 못하도록 직접 접근을 막는다.
@property
def eng(self):
return self.__eng
@eng.setter
def eng(self, eng):
# 만약 사용자가 빈 문자열 입력 시 raise 에러 발생시킴
if not eng:
raise ValueError("영어 단어는 비워둘 수 없습니다")
self.__eng = eng
※ 레벨의 경우 1이상을 입력받도록 if문을 설정한다.
[2] DAO 클래스 (class WordsDAO)
WordsDAO 클래스는 데이터베이스와 직접 통신하는 역할을 담당한다.
만약 DAO가 없다면, 사용자가 단어를 등록해달라 요청했을 때
프로그램의 핵심 기능을 하는 WordService가 직접 DB에 연결을 하고
SQL문을 쓰고, 예외 처리를 하는 너무 많은 일을 해야하기 때문에
역할을 분리하여 프로그램을 구성한다.
- WordServic (핵심 기능) : 단어 객체를 줄 테니 DB에 저장해 줘
- WordsDAO (데이터 접근) : 그래, 내가 DB에 접속해서 INSERT문 실행할게
✅데이터베이스연결, 연결해제
데이터베이스 연결 메서드와 연결해제 메서드를 생성하여
메서드만 호출하여 데이터베이스 연결과 연결해제를 쉽게 한다. (코드 길어짐 방지)
# 데이터베이스 연결
def connect(self):
self.db = MySQLdb.connect(host='localhost', user='apple', password='1111', db='ai', charset='utf8')
# 데이터베이스 연결해제
def disconnect(self):
if self.db:
self.db.close()
✅ CRUD 기능 구현
| 생성 메서드 | 기능 |
| insert() | 단어 등록 |
| select_all() | 전체 조회 |
| update() | 수정 |
| delete() | 삭제 |
# 예시코드
sql = "insert into voca (eng, kor, lev) values (%s, %s, %s)"
▶ word 객체의 데이터를 받아 데이터베이스에 저장한다.
[3] 실질적으로 작동하는 알고리즘 (class WordService)
WordService는 프로그램의 실제 동작을 담당하고 있는 클래스이다.
사용자에게 데이터를 입력을 받아 word객체를 생성하고 DAO를 통해 데이터베이스에 저장하는 방식이다.
✅ 실행순서
eng = input("단어를 입력하세요: ")
kor = input("뜻을 입력하세요: ")
↓
word = Word(eng, kor, lev)
↓
self.dao.insert(word)
✅ 수정 + 삭제하기 전 데이터 확인
수정과 삭제 기능에선 해당 단어가 존재하는지 확인할 수 있는 기능을 추가하였다.
존재하지 않는 데이터를 수정하거나 삭제하는 상황을 방지하고자 해당 기능을 추가하였다.
# 예시 코드
word = self.dao.search(eng)
if not word:
print("수정할 단어가 없습니다")
[4] ui용 클래스 (class Menu)
Menu 클래스는 사용자에게 보여줄 ui를 담당하는 클래스이다.
사용자에게 ui를 보여주고 사용자가 메뉴를 입력하면
입력받은 데이터를 WordService에 뿌려 기능을 작동하게 한다.
✅ 반복문 사용
반복문을 사용해서 프로그램이 종료될 때까지 메뉴를 계속 출력하도록 만든다.
while True:
✅ 선택한 메뉴에 따라 기능 호출
사용자가 선택한 메뉴에 따라 WordService의 기능을 호출하도록 만든다.
if menu == 1:
self.service.insert_word()
'Python > Database' 카테고리의 다른 글
| [단어장 프로그램 복습] 데이터 저장 클래스를 사용하는 이유 (0) | 2026.06.11 |
|---|---|
| [Python MySQL] 회원가입, 로그인, 회원정보 수정, 회원 탈퇴 프로그램 만들기 (0) | 2026.06.09 |
| [Python MySQL] Python에서 MySQL 연결하고 데이터 조회, 추가하기 (0) | 2026.06.09 |