############################ # 데이터베이스 사용 이해하기 ############################ # from tinydb import TinyDB, Query import pandas as pd from datetime import datetime from pprint import pprint from userdblib import fetch_user_by_email, fetch_user_by_id, fetch_users, insert_user, update_user, delete_user, create_table, get_new_id # # 데이터베이스 생성 및 연결 # db = TinyDB('db.json') # ########################################### # # 데이터베이스 쿼리 함수들 # # ########################################### # # 데이터가 없으면 샘플 데이터 추가 # def create_table(): # if len(db.all()) == 0: # users = [ # {'id': 1, 'name': '전 John', 'email': 'john@gmail.com', 'age': 20, 'created_at': '2021-01-01 00:00:00'}, # {'id': 2, 'name': '오 Jane', 'email': 'jane@gmail.com', 'age': 25, 'created_at': '2021-01-02 00:00:00'}, # {'id': 3, 'name': '방 Bob', 'email': 'bob@gmail.com', 'age': 30, 'created_at': '2021-01-03 00:00:00'}, # {'id': 4, 'name': '윤 Alice', 'email': 'alice@gmail.com', 'age': 35, 'created_at': '2021-01-04 00:00:00'}, # {'id': 5, 'name': '김 Bill', 'email': 'bill@gmail.com', 'age': 40, 'created_at': '2021-01-05 00:00:00'}, # ] # db.insert_multiple(users) # def get_new_id(): # users = fetch_users() # new_id = users[-1]['id'] + 1 # return new_id # def fetch_users(): # return db.all() # def fetch_user_by_id(id): # users = db.search(Query().id == id) # if len(users) == 0: # return [] # else: # return users.pop() # def fetch_user_by_email(email): # users = db.search(Query().email == email) # if len(users) == 0: # return [] # else: # return users.pop() # def insert_user(user): # # new_user = user_from_input() # db.insert(user) # def update_user(user): # db.update(user, Query().id == user['id']) # def delete_user(id): # db.remove(Query().id == id) ########################################### # 화면 기능 함수들 # ########################################### def user_from_input(): print("#"*30 + " 사용자 정보 입력 " + "#"*30) name = input("이름: ") email = input("이메일: ") age = int(input("나이: ")) created_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") user = {'id': get_new_id(), 'name': name, 'email': email, 'age': age, 'created_at': created_at} return user def user_from_input_update(user): print("#"*30 + " 사용자 정보 업데이트 " + "#"*30) name = input(f"이름({user['name']}): ") email = input(f"이메일({user['email']}): ") age = int(input(f"나이({user['age']}): ")) # created_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") user = {'id': user["id"], 'name': name, 'email': email, 'age': age, 'created_at': user["created_at"]} return user # Function to display all users def display_users(): users = fetch_users() for user in users: print(f"ID:{user['id']}\n이름:{user['name']}\n전자메일:{user['email']}\n나이:{user['age']}\n가입날짜:{user['created_at']}\n") def add_new_user(): user = user_from_input() insert_user(user) print("새 사용자가 추가되었습니다.") def update_existing_user(): print("#"*30 + " 사용자 정보 수정 " + "#"*30) id = int(input("수정할 사용자의 ID를 입력하세요: ")) user = fetch_user_by_id(id) if len(user) == 0: print("해당 ID의 사용자가 없습니다.") else: user = user_from_input_update(user) user['id'] = id update_user(user) print("사용자 정보가 수정되었습니다.") def delete_existing_user(): print("#"*30 + " 사용자 정보 삭제 " + "#"*30) id = int(input("삭제할 사용자의 ID를 입력하세요: ")) user = fetch_user_by_id(id) if len(user) == 0: print("해당 ID의 사용자가 없습니다.") else: delete_user(id) print("사용자 정보가 삭제되었습니다.") def search_user_by_email(): print("#"*30 + " 사용자 정보 검색 " + "#"*30) email = input("검색할 사용자의 이메일을 입력하세요: ") user = fetch_user_by_email(email) if len(user) == 0: print("해당 이메일의 사용자가 없습니다.") else: print(f"ID:{user['id']}\n이름:{user['name']}\n전자메일:{user['email']}\n나이:{user['age']}\n가입날짜:{user['created_at']}\n") ########################################### # main 함수 create_table() while True: print("#"*30 + " 사용자 관리 프로그램 " + "#"*30) print("1. 사용자 전체 조회") print("2. 사용자 추가") print("3. 사용자 수정") print("4. 사용자 삭제") print("5. 이메일로 사용자 검색") print("6. 종료") print("#"*80) menu = int(input("메뉴를 선택하세요: ")) if menu == 1: display_users() elif menu == 2: add_new_user() elif menu == 3: update_existing_user() elif menu == 4: delete_existing_user() elif menu == 5: search_user_by_email() elif menu == 6: print("프로그램을 종료합니다.") break else: print("잘못된 메뉴입니다. 다시 선택하세요.")