160 lines
5.3 KiB
Python
160 lines
5.3 KiB
Python
############################
|
|
# 데이터베이스 사용 이해하기
|
|
############################
|
|
|
|
# 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("잘못된 메뉴입니다. 다시 선택하세요.")
|
|
|