-
파이썬 도서관리 프로그램코딩 연습/코딩배우기 2024. 1. 3. 09:07
오라클 SQL 연습을 위한 파이썬 도서관리 프로그램 코딩 연습 코드. 파이썬에서 오라클 연결 라이브러리(cx_Oracle) 호출 후 함수 기반으로 DB 쿼리한 결과를 정리한 내용입니다.
파이썬 도서관리 프로그램 작성 개요
VS Code 터미널 기반에서 코드를 실행하면 아래 이미지와 같이 출력되며, 메뉴를 선택하고 나오는 문구대로 입력하면 결과를 볼 수 있음
프로그램 실행 화면 코드를 실행하면,
'도서 조회 프로그램' 메뉴 선택 목록(전체 조회, 도서 검색, 도서 추가, 도서 삭제, 프로그램 종료)이 나오고,
번호를 선택하면 각 코드가 실행됨
도서 관리 프로그램에서 사용하는 DB 테이블은 2개(book_store, book_list)로 각 컬럼은 다음과 같음
- book_store : 관리코드(PK), 출판사명, 전화번호, 국가, 주소
- book_list : 도서관리코드(PK), 책 제목, 저자, 출판일자, 출판사코드(FK), 도서 가격
오라클 DB 관리 툴 - book_store Table 아래 다운로드 파일은 위 이미지에 있는 BOOK_STORE 관리 예제 데이터임
1_book_store.sql0.00MB오라클 DB 관리 툴 - book_list Table 아래 파일은 위 이미지에 있는 BOOK_LIST 관리 예제 데이터임
2_book_list.sql0.01MB도서관리 프로그램 소스 코드
아래 소스 코드 기반으로 프로그램 실행
#pip install cx_oracle (or anaconda인 경우, conda install cx_oracle) import cx_Oracle as oci dsn = oci.makedsn('localhost', '1521', 'xe') conn = oci.connect('scott', 'tiger', dsn) # conn = oci.connect('scott/tiger@localhost:1521/xe') # 위 2줄 대신에 1줄로 처리 시 cursor = conn.cursor() def select_all_book(): query = ''' select * from book_list join book_store on book_list.publisher = book_store.bscode order by book_list.title ''' cursor.execute(query) res = cursor.fetchall() return res def select_book(book_name): query = f''' select * from book_list join book_store on book_list.publisher = book_store.bscode where book_list.title like '%{book_name}%' or book_store.name like '%{book_name}%' order by book_list.title ''' cursor.execute(query) res = cursor.fetchall() return res def insert_bstore(**kwargs): try: query = ''' insert into book_store values (:1, :2, :3, :4, :5) ''' cursor.execute(query, kwargs) conn.commit() return True except: return False def insert_book(**kwargs): try: query = ''' insert into book_list values (:bcode, :title, :author, :year_of_publication, :publisher, :price) ''' cursor.execute(query, kwargs) conn.commit() return True except: return False def delete_book(bcode): try: query = f''' delete book_list whrere bcode = {bcode} ''' cursor.execute(query) conn.commit() return True except: return False ## 도서 조회 순환문 while True: print(f'\n{"#"*5} 도서 조회 프로그램 {"#"*5}\n') print('1. 전체 조회') print('2. 도서 검색') print('3. 도서 추가') print('4. 도서 삭제') print('5. 프로그램 종료') menu_num = input('\n메뉴 선택 : ') if menu_num == '1': total_book = select_all_book() for book in total_book: print(book) elif menu_num == '2': while True: search_title = input('\n검색할 도서명(검색 종료: "엔터"/"q") : ') if not search_title or search_title.lower() == 'q': break else: search_book = select_book(search_title) if not search_book: print('\n검색 도서가 없습니다.\n') continue for book in search_book: print(book) elif menu_num == '3': append_book = {} bcode_ = input('도서관리번호: ') if bcode_.isdigit(): _bcode = int(bcode_) else: print(f'\n관리번호를 잘못 입력했습니다. ^^!\n') continue if not _bcode: print(f'\n도서관리번호를 입력하지 않았습니다.\n번호 선택 후 다시 입력해주세요. ^^!\n') continue _title = input('도서 이름: ') _author = input('도서 저자: ') _publish_date = input('도서 출판일: ') # 출판사 목록을 보여주기 위해 쿼리 cursor.execute('''select distinct name, bscode from book_store''') for publisher_name in cursor.fetchall(): print(publisher_name, end=', ') print(f'\n{publisher_name}\n') _publisher = input('출판사 관리코드: ') price_ = input('도서 가격: ') if price_.isdigit(): _price = int(price_) else: print(f'\n도서 가격을 잘못 입력했습니다. ^^!\n') continue append_book['bcode'] = _bcode append_book['title'] = _title append_book['author'] = _author append_book['year_of_publication'] = _publish_date append_book['publisher'] = _publisher append_book['price'] = _price res_booklist = insert_book(**append_book) if res_booklist: print(f'\n도서 리스트에 등록했습니다.\n') else: print(f'\n도서 리스트 등록 실패!! 다시 등록해주세요.\n') continue elif menu_num == '4': search_book_title = input('\n삭제할 도서명: ') if not search_book_title: print(f'\n검색어를 입력하지 않았습니다. ^^!\n') else: # 삭제할 도서 조호 목록을 보여주기 위해 쿼리 cursor.execute(f"""select bcode, title, author from book_list where title like '%{search_book_title}%'""") books = cursor.fetchall() if books: for book in books: print(book) # print(f"\n도서관리번호: {book[0]}\n제목: {book[1]}\n저자: {book[2]}\n") else: print(f'\n검색 도서가 없습니다!! 다시 검색해주세요.\n') continue del_bcode = input("\n삭제할 '도서 관리번호'는..? : ") res_delete = delete_book(del_bcode) if res_delete: print(f'\n도서를 삭제했습니다.\n') else: print(f'\n도서 삭제 실패!! 다시 삭제해주세요.\n') continue elif menu_num == '5': print('\n프로그램을 종료합니다.\n') break elif menu_num not in ('1', '2', '3', '4', '5'): print('\n잘못 입력하셨습니다. 다시 입력하세요!!') cursor.close() conn.close()
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
블로그스팟 포스팅 URL 글 목록 전체 가져오기 (0) 2024.08.25 파이썬 워드클라우드 설치, konlpy Okt() 사용 (0) 2024.02.14 숫자 뽑기 게임 - 파이썬 Tkinter로 구현 (0) 2022.04.11 SSG.COM 실시간 급상승 키워드, 베스트 상품 100위 추출(with 파이썬) (0) 2022.04.11 뉴스픽 파트너스 기사 링크 주소 복사 (5) 2022.04.10