MapleStory Finger Point
본문 바로가기
Back-end/Python - project

[Python] 전화번호부 Project - DB연동, Create 구현

by 디팔⸜( ◜࿁◝ )⸝︎︎ 2022. 8. 6.
문제 해결능력을 기르기 위해 쓰기 시작한 글이었으나 가장 큰 문제는 나에게 있었다
나는 이 주소록 Project를 구현하는데, 왜 Class를 사용하여 프로젝트를 작성하고 있는지도 모르는 상태이다.

빠르게 기능을 구현하고 익힐 수 있는 능력이 있었다면 좋았겠지만,

나는 어쩌다 우연치 않게 '초심자의 행운'이라도 얻은 마냥 10연속 야바위 성공을 한 느낌이다.

그래서 나는 다시 전화번호부 프로젝트를 해보려 한다. 느려도 확실하게 가야한다. 
빠른 척은 언젠가 들키기 마련이다.


전화번호부 프로젝트의 개요

전화번호부 프로젝트를 통해 구현하고자 하는 기능은 CRUD (Create, Read, Update, Delete)이다.

  • 전화번호 추가하기(Create)
  • 전화번호 조회하기(Read)
  • 전화번호 수정하기(Update)
  • 전화번호 삭제하기(Delete)
  • 계속해서 일정한 규칙(이름, 전화번호, 이메일)이 있는 객체를 만들어내야 하기에
    개개인의 정보는 Person class를 통해 관리하고, 전체 전화번호부는 phoneBook class를 통해 관리하고자 한다.
  • 입력된 정보의 연속성을 위해, MariaDB를 연동시켜 데이터베이스에 자료를 저장하고자 한다.

1. mariaDB 유저 생성 및 권한주기, 데이터베이스 생성

데이터 베이스를 연결하기 위해선 host, user 등의 정보가 필요하다.

이때 root로 접근하면 보안상의 문제가 발생할 수 있으니 권한을 준 유저를 생성하고, 그 유저를 통해 접속하는 것이 좋다.

 

유저 생성 및 권한 주기

//root 계정으로 접속한다.

mariadb -u root -p

//계정 생성

CREATE USER 'user_name'@'%' IDENTIFIED BY 'password';

//권한 부여

GRANT ALL PRIVILEGES ON database_name.허용할테이블(전체는 *) TO 'user_name'@'%';

//권한 밀어주기

FLUSH PRIVILEGES;

//생성된 계정 확인

SELECT host, user from mysql.user;
  • user 정보는 모두 'mysql' 이라는 database에 저장된다고 한다.

데이터 베이스 생성

create database phoneBook

use phoneBook

create table phoneBookDB(
	id int NOT NULL AUTO_INCREMENT,
	name varchar(50),
	phone varchar(50),
	email varchar(50),
	CONSTRAINT phonebook_pk PRIMARY KEY (id)
);

desc phoneBookDB
  • 데이터 베이스를 생성하고, 해당 값들이 들어갈 테이블을 만들어 줬다.

전화번호부 코드 기초단계 작성

import sys
import MySQLdb

conn = MySQLdb.connect(
    host = '127.0.0.1', user ='유저이름' , password ='비밀번호', database='phoneBook',
    port = 3306, charset='UTF-8', use_unicode=True)
cursor = conn.cursor()
  • 데이터 베이스와 연결시켜주기 위해 연결 코드를 작성하였다.
  1. sys 모듈은 exit 기능을 구현하기 위해 불러주었다. 
  2. MySQLdb 라는 모듈을 import시켜 이 모듈의 connect() 메소드를 이용해 연결시켜주었다.
  3. 상호작용하기 위한 cursor 객체를 만들어주었고 SQL 과 해당 코드 사이에서 전달자 역할을 할 녀석이다.

Person Class 코드 작성 

class Person:
    def __init__(self, name, phone, email):
        self.name = name
        self.phone = phone
        self.email = email

    def insert(self):
        insert_name = self.name
        insert_phone = self.phone
        insert_email = self.email
        cursor.execute(f"insert into phoneBookDB(name, phone, email) values('{insert_name}','{insert_phone}','{insert_email}')")
        conn.commit()
  • 이름, 전화번호, 이메일을 받아 객체를 생성하고 그 정보들은 각각 그 객체의 정보로 저장된다.
  • insert 내부 메소드를 실행하면 연결된 DB로 해당 자료들을 보내 저장시킨다.
  • conn.commit()을 통해 보내진 자료를 저장시킨다.

phoneBook Class 코드 작성

class phoneBook:
    def __init__(self):
        self.menu()

    def menu(self):
        print('전화번호부 입니다. 원하시는 기능의 숫자를 입력해주세요')
        print('[1] 전화번호 등록하기')
        print('[2] 전화번호 검색하기')   
        print('[3] 전화번호 수정하기')
        print('[4] 전화번호 삭제하기')
        print('[5] 종료하기')    
        choice = int(input('원하시는 기능의 숫자를 입력해 주세요 >>'))
        self.run(choice)
    
    def run(self,choice):
        while True:
            if choice == 5 : self.exit()
            elif choice == 1 : self.insert()
            elif choice == 2 : self.search()
            elif choice == 3 : self.update()
            elif choice == 4 : self.delete()
            else : print('잘못된 입력입니다. 다시 입력해주세요')

    def insert(self):
        print('===신규 주소록 생성===')
        name = input('등록할 이름을 입력해주세요')
        phone = input('등록할 전화번호를 입력해주세요')
        email = input('등록할 이메일을 입력해주세요.')
        if name and phone and email :
            Person(name,phone,email).insert()
            print(f'{name}님의 전화번호가 추가되었습니다')
            return
        else: 
            print('모든 정보가 입력되지 않아 추가되지 않았습니다.')
            name = "" ; phone = "" ; email = ""
        return self.menu()
    
    def exit(self):
        print('프로그램을 종료합니다')
        sys.exit()

phonebook1 = phoneBook()
  • 전화번호부 객체를 생성하고, 실행시키면 생성자 함수가 menu() 메소드를 소환한다.
  • menu() 메소드에서 choice 값을 담아 run() 메소드를 실행시키고 이는 각 기능으로 연결된다.
  • insert() 메소드에서 정보를 받아 정보가 유효하면 Person객체에 각 정보를 담아 보낸 뒤, Person.insert() 메소드를 실행한다.
  • exit는 sys 모듈을 통해 구현되었다.
  • 마지막으로 객체를 만들어 실행한다.

실행 및 DB 결과 

콘솔창에 출력되는 모습

 

DB에 잘 들어간 모습 (개인정보라 다 잘라버렸다;;)

 

참고한 사이트

-https://velog.io/@dev2820/DB-mariadb-계정-생성-및-권한-부여

댓글