goodthings4me.tistory.com

오라클 SQL 연습을 위한 파이썬 도서관리 프로그램 코딩 연습 코드. 파이썬에서 오라클 연결 라이브러리(cx_Oracle) 호출 후 함수 기반으로 DB 쿼리한 결과를 정리한 내용입니다.
파이썬 도서관리 프로그램 작성 개요
VS Code 터미널 기반에서 코드를 실행하면 아래 이미지와 같이 출력되며, 메뉴를 선택하고 나오는 문구대로 입력하면 결과를 볼 수 있음

코드를 실행하면,
'도서 조회 프로그램' 메뉴 선택 목록(전체 조회, 도서 검색, 도서 추가, 도서 삭제, 프로그램 종료)이 나오고,
번호를 선택하면 각 코드가 실행됨
도서 관리 프로그램에서 사용하는 DB 테이블은 2개(book_store, book_list)로 각 컬럼은 다음과 같음
- book_store : 관리코드(PK), 출판사명, 전화번호, 국가, 주소
- book_list : 도서관리코드(PK), 책 제목, 저자, 출판일자, 출판사코드(FK), 도서 가격

아래 다운로드 파일은 위 이미지에 있는 BOOK_STORE 관리 예제 데이터임

아래 파일은 위 이미지에 있는 BOOK_LIST 관리 예제 데이터임
도서관리 프로그램 소스 코드
아래 소스 코드 기반으로 프로그램 실행
#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()
블로그 인기글
[엑셀] 근무연수 및 근무 개월수 계산하는 함수
직장을 다니다 보면 몇 년 몇 개월 또는 전체 며칠을 다니고 있는지 궁금할 때가 있다. 아니면, 총무나 인사 일을 할 때 직원들의 근속연수 또는 근속개월수 등을 계산하고 싶을 때도 있다. 이런 경우 엑셀 함수를 활용하면 어떨까!! 근무연수 및 근무 개월수 계산 함수 알아보기 엑셀에서 근무연수 또는 근무 개월수 계산하는 것은 datedif() 함수를 사용하면 간단하게 해결할 수 있다. 아래 이미지를 보면서 설명하면, 셀 E1에 기준일자를 입력하고, 근무연수를 구할 때는 =datedif(B3,$E$1,"Y")&"년" 을 입력한다. 근무개월수는 =datedif(B3,$E$1,"M")&"개월" 처럼 입력한다. 일수까지 파악할 때문 별로 없지만, 심심풀이로 구해보고 싶을 때 =datedif(B3,$E$1,"D")..
goodthings4me.tistory.com
폐업 신고 절차와 부가가치세 신고하는 방법
폐업 신고 시 세무서 안 가고 온라인으로 신고하는 방법인 '국세청 홈택스를 이용하여 폐업 신고하는 절차와 폐업 후 해야 하는 부가가치세 신고, 인건비 저리, 종합소득세 신고 등에 대해 포스팅합니다. 폐업 신고 시 홈택스 이용하는 방법과 부가가치세 등 신고 절차 여러가지 사유로 폐업을 해야 할 때, 예전에는 세무서를 방문해야 했지만 국세청 홈택스가 생긴 이후에는 사업자 등록이나 폐업 등을 인터넷으로 할 수가 있게 되었습니다. 특히, 코로나 시국인 요즘은 더더욱 온라인 신청 업무가 더 활성화되었죠. 폐업을 한다는 것 자체가 우울한 일인데, 발품을 파는 것보다는 커피 한잔 하면서 인터넷으로 간단하게 처리하는 게 좋을 듯하여 그 절차를 올려봅니다. 폐업은 폐업 신고와 함께 폐업 후 절차까지 모두 마쳐야 불이익이..
goodthings4me.tistory.com
[국세청] 현금영수증가맹점으로 가입바랍니다. 메시지 해결방법(개인사업자)
▶ 현금영수증 가맹점 가입 메시지를 받고... 온라인 쇼핑몰 사업을 시작하려고 사업자등록증을 발급받고 난 후 얼마 안 있어서 국세청으로부터 어느 시점까지 '현금영수증 가맹점'으로 가입하라는 문자메시지가 받았었다. 그 메시지 기한이 오늘 도래했는데, 인터넷에서 찾아보니 홈택스에서 현금영수증 발급 사업자 신청을 할 수가 있었다. [관련내용] 홈>국세정책/제도>전자(세금)계산서/현금영수증/신용카드>현금영수증∙신용카드>가맹점가입 ▶ 홈택스 사이트에서 신청하는 절차는 다음과 같다. 우선, 홈택스에 로그인을 해야 합니다. 세상이 좋아져서 공인인증서 없이도 손쉽게 간편인증 로그인이 가능하다. 여러 인증방법 중 카카오톡 인증이 가장 편리한 거 같다. 간편인증 로그인 후 상단 '조회/발급' 탭 클릭 후 '현금영수증>현금..
goodthings4me.tistory.com
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
블로그스팟 포스팅 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 |
댓글