티스토리 뷰
안녕하세요 :)
파이썬 개발을 주제로한 네번째 포스팅은 텍스트 모드의 Todolist 개발입니다.
일방적으로 투두 리스트는 그냥 여러 조건문과 정보를 초기화 하기위한 클래스 하나 정도면 쉽게 구현할수 있습니다만!
제가 요즘 DB 공부를 따로 하구 있습니다 ㅎㅎ 파이썬은 pymysql 라이브러리를 통한 데이터베이스 연동을 할수 있습니다.
그래서 이번에는 실질적으로 Todo list를 구현하고 이 정보를 데이터 베이스와 연동하여 구현을 진행 해보겠습니다.
먼저 텍스트 모드의 투두 어플리케이션을 만들기 전에 데이터베이스 테이블을 생성하였습니다.
스키마의 이름은 TodoDB 이고 테이블의 이름은 dataTBL입니다
나중에 userTBL을 생성하여 로그인 하여 계정마다의 투두리스트를 달리 관리하는 것도 해보겠습니다.
어쨋든 완성된 테이블은 아래와 같습니다. 과정이 궁금하시다면 mysql 카테고리의 "Todolist 를 위한 TodoDB구축" 게시물을 참고해주세요!
각 행에 대한 정보는 다음과 같습니다.
ID - 각 아이템을 구분해주기위한 ID, primary key
Contents - 수행할 계획, 지금은 data1, 2, 3 으로 해두었지만, 이용할때는 "4시에 장보러가기 " 이런 내용이겠죠
do - 수행한 여부, 만약 수행완료 하였다면 1 아니라면 0
간단하게 위의 세가지 데이터로 테이블을 모듈링했습니다. 나중에 유저가 추가되고 로그인이 추가된다면 다른 행들이 더 추가 되어 새로운 모듈링이 필요하겠지만 아직 텍스트 모드 데모 버전 이니까요!
이제 진짜 텍스트 버전 어플리케이션의 개발 계획에 대해 한번 다루어 보겠습니다.
먼저 선택할수 있는 작업은 5가지였으면 좋겠습니다.
1. 리스트 조회
2. 내용 삽입
3. 내용 삭제
4. 수행 여부 수정
5. 프로그램 종료
그럼 위의 작업들을 모두 함수로 정의해서 사용하면 편할꺼 같네요 ㅎ 각각을 앞으로
1. SELECT 2.INSERT 3. DELETE 4.status_change 5.EXIT
라 하겠습니다.
파일이름은 Todosql.py 로 하고 시작해보겠습니다.
가장먼저 할일은 미리 만들어둔 TodoDB 데이터 베이스와 커넥션과 커서 객체를 생성하는 것이죠 코드는 다음과 같습니다.
(아래의 과정은 mysql 카테고리에서 파이썬과 연동 게시글을 살펴보면 조금더 자세하게 알수 있습니다.)
이제 기본틀이 될 텍스트 인터페이스를 만들어 보겠습니다.
코드를 실행하면 This is simple Todo list Text Application 이라는 문구가 출력되고
사용가능한 5개의 작업 리스트가 출력되었으면 좋겠습니다.
그리고 키보드 인풋을 받아 실행할 작업을 선택하고 작업 함수가 호출 되었으면 좋겠습니다.
그런데 작업이 완료된 이후로는 어떻게 하죠? 또 새로운 작업을 입력 받아 새로운 작업을 수행하는게 어플리케이션을 운용할때 편리할 것입니다.
위의 조건을 생각해 반복문과 조건문을 혼합하여 만든 코드는 다음과 같습니다.
case 변수는 조건문을 통해 작업을 선택할때 사용할 변수 입니다.
반복문속에서 제일 첫번째로 사용됨으로 각각의 작업을 실행후 맨위로 올라왔을때 다음작업의 번호를 입력받을수 있게 하였습니다.
1번은 리스트를 조회 하는 select입니다. sql의 쿼리에서 함수명을 따왔고 조건(case ==1)일때 실행됩니다.
2번은 리스트에 아이템(행)을 삽입할 때 사용하는 insert입니다. 한행에는 ID(index로 사용) , contents do 세가지의 열이 있지만 do(수행여부)의 경우 리스트에 내용을 삽입할 떄부터 수행완료상태(1)로 들어가는 것은 말이 안되기에 처음엔 0으로 초기화 될수 있게 나중에 함수에서 설정해 주었습니다. 조건(case==2)일때 실행됩니다.
3번은 리스트의 아이템을 삭제할때 사용하는 delete입니다. 이는 인덱스를 입력받으면 해당인덱스의 한행을 지울수 있도록 하였습니다.
4번은 수행여부, do열의 값을 변경할수 있도록 해주는 status_change입니다. 그냥 상태 변화 정도로의 의미로 함수명을 지어주었습니다.
5번은 입력시 반복문 루프에서 빠져나와 프로그램을 종료할수 있도록 해주었습니다.
이제 각각의 함수에 대해 다루어 보겠습니다.
select 의 경우 각열을 구분하기 위한 문자열이 제일 위에 출력되고 pymysql의 함수를 이용해 테이블 내의 모든 열정보를 조회하고 모든 정보를 res 라는 변수 안에 튜플의 형태로 저장할수 있도록 해주었습니다.
그리고 for loop을 사용하여 모든 정보를 화면에 출력할수 있도록 해주었습니다.
insert함수는 세가지의 매개변수 를 이용합니다 각각의 매개변수로 sql문 안의 values 값을 초기화 할수 있게 해주었고
포멧함수를 사용하였습니다. 방법은 여려가지가 있지만 제일 먼저 떠올라 사용한 방법이 format이었습니다. 하지만 변수의 타입만 잘 변환해 준다면 스트링과 매개변수 사이에 + 를 이용한 스트링 만들기도 가능할것같습니다.
예를들어 이런식으로 말이죠
"INSERT INTO dataTBL VALUES (" + str(index) + "," + str(contents) + "," + str(do) + ")"
방법은 자유입니당
delete함수는 ID(index)열을 이용한 아이템 삭제를 위해 코딩하였습니다.
status_change의 경우 sql 쿼리의 update를 이용하였습니다. 인덱스와 바꿀 상태를 boolean이라는 변수를 통해 매개변수로 받고 이를 쿼리문 안에 넣어주었습니다.
마지막으로 커넥션을 닫아 주며 코드를 마무리 하였습니다.
부족하고 부끄러운 코드지만 혹시 필요 하신 분은 깃허브 주소를 참조 해드리겠습니다.
https://github.com/Kimhaechan1022/Python_ToyProject/commit/c18c134e54ed3991ea8a0fb34016bc2b7f441d49
text mode TodoList complete · Kimhaechan1022/Python_ToyProject@c18c134
Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files text mode TodoList complete Loading branch information Showing 1 changed file with 14 additions and 5 deletions. +14
github.com
다음 포스팅은 간단한 시나리오를 통한 데모를 진행해보겠습니다.
'Language > Python3' 카테고리의 다른 글
Python3 - Todolist (GUI), use Database (1) | 2021.05.15 |
---|---|
Python3 - todolist(text) demo (0) | 2021.05.14 |
Python3 - Music playList (0) | 2021.05.12 |
Python3 - Git & Github(2) (3) | 2021.05.08 |
Python3 - Git & Github(1) (1) | 2021.05.07 |