* 해당 프로그램은 교육원에서 수강생을 관리하기 위해 개발하여 사용 중인 프로그램입니다.


[MySQL을 이용한 고객 관리 프로그램 제작]

 (바로가기를 클릭하시면 해당 게시글로 넘어갑니다.)



Ⅰ 'PyMySQL'을 이용한 Python - MySQL 연동


1. 'PyMySQL' 설치 및 기본 연동 (바로가기)


2. 'PyMySQL'을 이용한 기본 쿼리문 전달 (DB/Table 생성 등) (바로가기)



Ⅱ 프로그램 기능 구현


3. 기본 구조 및 데이터 조회 기능 구현 (바로가기)


4. 데이터 입력/삭제 기능 구현 (바로가기)


5. 데이터 변경 기능 구현 (바로가기)


6. 프로그램 종료 기능 구현 및 전체 코드 (바로가기)




# 1-1. 'PyMySQL' 설치


pip install PyMySQL


\Users\Project> pip install PyMySQL

Collecting PyMySQL

Using cached https://files.pythonhosted.org/packages/32/e8/222d9e1c7821f935d6dba8d4c60b9985124149b35a9f93a84f0b98afc219/PyMySQL-0.8.1-py2.py3-none-any.whl

Installing collected packages: PyMySQL

Successfully installed PyMySQL-0.8.1


터미널에 'pip(3)'를 이용한 문장으로 간단하게 'PyMySQL'를 다운받을 수 있습니다.



# 1-2. 필요 정보 입력받고 사용할 메소드 호출하기


'PyMySQL'을 import한 뒤 MySQL과 연결(Connect)하기 위해서는 'pymysql.connect' 메소드를 이용해야 합니다. 이 함수는 host, user, password, db, charset 등의 정보를 필요로 하는데, 고정된 값을 사용하는 경우에는 문자열로 넣어주고 사용할 때 마다 입력받을 정보는 'input'을 이용해 받아오겠습니다. 참고로 사용할 DB의 경우 MySQL에 접속하여 미리 생성해두었습니다.


u = input("계정명: ")

p = input("패스워드: ")


import pymysql

connect = pymysql.connect(host='localhost', user=u, password=p, db='test', charset='utf8')

cursor = connect.cursor(pymysql.cursors.DictCursor)


DB접속 후에는 'connect'로부터 이후 작성할 SQL 문장을 처리하는 'execute', 'fetchall' 등의 메소드를 사용하기 위한 'cursor' 메소드를 호출했습니다.


 

# 1-3. 연결 확인


해당 파일을 'project02.py'로 저장하고, 터미널에서 해당 디렉토리로 이동해 파일을 실행했습니다. 계정명과 패스워드 값을 입력한 뒤 연결, 코드 등에 문제가 없는 경우에는 에러 발생없이 프로그램이 종료됩니다.


python project02.py


\Users\Project> python project02.py

계정명: root

패스워드: 123456




# 2-1. DB 생성하기


sql = ["DROP DATABASE IF EXISTS test;", "CREATE DATABASE test;", "SHOW DATABASES;"]

for s in sql:

cursor.execute(s)

result = cursor.fetchall()

for r in result:

print(r)


\Users\Project> python project02.py

{'Database': 'information_schema'}

{'Database': 'iata'}

{'Database': 'mysql'}

{'Database': 'performance_schema'}

{'Database': 'sakila'}

{'Database': 'sys'}

{'Database': 'test'}

{'Database': 'world'}


'execute' 메소드에 for문을 이용하여 실행할 쿼리문을 전달하고 'fetchall' 메소드를 이용하여 쿼리문을 실행하였습니다. DB 생성 후 조회 쿼리를 마지막에 담아 출력해보니 test DB가 제대로 생성되어있었습니다.




# 2-2. 테이블(Table) 생성하기


sql = ["USE test;", 

"CREATE TABLE student(name VARCHAR(8) NOT NULL,

birth INT(8),

team VARCHAR(10),

phone VARCHAR(11),

address VARCHAR(5))engine=innoDB default charset=utf8;",

"SHOW TABLES;"]

for s in sql:

cursor.execute(s)

result = cursor.fetchall()

for r in result:

print(r)


\Users\Project> python project02.py

{'Tables_in_test': 'student'}


DB 생성 때와 마찬가지로 'execute' 메소드에 for문을 이용하여 실행할 쿼리문을 전달하고 'fetchall' 메소드를 이용하여 쿼리문을 실행하였습니다. 출력해보니 student 테이블이 잘 생성되어있었습니다.


# 3-1. 기본 구조


본 프로그램은 데이터 조회, 입력, 삭제, 변경, 종료 등의 기능으로 구성되어 있습니다. 'while문'을 이용하여 종료 명령어가 입력되기 전까지는 계속 명령어를 입력 받도록 설계 했으며 명령어가 잘못 입력된 경우에는 안내 메세지가 출력되도록 하였습니다.

  

cmd = 'na'

while cmd != 'q':

print("")

print("***사용 가능 명령어 리스트***")

print("a  : 모든 데이터 조회(all)")

print("f  : 조건에 맞는 데이터만 조회(find)")

print("i  : 수강생 입력(insert)")

print("d  : 수강생 삭제(delete)")

print("r  : 정보 변경(revise)")

print("q  : 저장하고 나가기(quit)")

print("")

cmd = input("command(명령어 입력): ")

print("")

if cmd == 'a': <code>

elif cmd == 'f': <code>

elif cmd == 'i': <code>

elif cmd == 'd': <code>

elif cmd == 'r': <code>

elif cmd == 'q': <code>

else:

print("잘못된 명령어가 입력되었습니다. 다시 입력해 주세요.")


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력):




# 3-2. 모든 수강생 조회(all)


if cmd == 'a':

sql = "SELECT * FROM student"

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): a


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지   

-----------------------------------------------

  test1    19900301    A   01000000000  서울

  test2    19910412    A   01011111111  인천

  test3    19920523    B   01022222222  수원

  test4    19930604    A   01033333333  대전

  test5    19940715    C   01044444444  부산

  test6    19950826    C   01055555555  대구

  test7    19960907    B   01066666666  서울

  test8    19971018    B   01077777777  인천

  test9    19981129    A   01088888888  대전

-----------------------------------------------


테이블의 모든 데이터를 출력하는 쿼리문을 전달한 뒤 결과를 result에 담아 출력하였습니다. 미리 입력해둔 테스트 데이터가 제대로 출력되었습니다. 참고로 출력 시에는 미리 제작해 놓은 'print_result()'를 호출하여 사용했습니다.


def print_result(result):

print("\n------------------------------------------------------------------------")

cnames = ['이름', '생년월일', '소속', '전화번호', '거주지']

for c in cnames:

print(c.center(11, ' '), end='\t')

print("\n------------------------------------------------------------------------")

ccodes = ['name', 'birth', 'team', 'phone', 'address']

forin result:

for c in ccodes:

print(str(r[c]).center(11, ' '), end='\t')

print("")

print("------------------------------------------------------------------------")





# 3-3. 조건에 맞는 데이터만 조회(find)


이름, 생년월일 등 각 칼럼에 따른 데이터를 조회할 수 있게 하기 위하여 'if문'을 이용하였으며, 전체적인 틀은 다음과 같습니다.


elif cmd == 'f':

print("무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)")

con = input("> ")

if con == '이름':

elif con == '나이':

elif con == '소속':

elif con == '전화번호':

elif con == '거주지':



# 3-3-1. 검색 기준: 이름


if con == '이름':

print("\n검색하실 수강생의 이름을 입력해 주세요.")

con2 = input("> ")

sql = "SELECT * FROM student WHERE name = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


검색 대상을 'input'으로 입력받아 쿼리문을 완성되도록 했는데, 아래와 같이 제대로 검색이 되는 것을 확인할 수 있습니다.


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

> 이름

검색하실 수강생의 이름을 입력해 주세요.

> test1


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

  test1    19900301    A   01000000000  서울

-----------------------------------------------



# 3-3-2. 검색 기준: 나이


elif con == '나이':

print("\n※ 숫자만 입력 해 주세요.\n")

input_age1 = int(input("몇 살 이상을 검색하시겠습니까? "))

input_age2 = int(input("몇 살 이하을 검색하시겠습니까? "))

import datetime, time

d = datetime.date.today()

year1 = d.year - input_age2 + 1

year2 = d.year - input_age1 + 1

sql = "SELECT * FROM student WHERE LEFT(birth, 4) BETWEEN {} AND {}".format(year1, year2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


저장된 데이터의 나이로 부터 생년월일(YYYYMMDD)을 추출하기 위해 오늘 자 년, 월, 일을 알려주는 'datetime'를 이용하였습니다. 추출된 연도 범위 안의 수강생을 출력하기 위해 'where'절에서 'left'를 이용하여 추출한 연도 4자리가 해당 범위에 속하는 학생만 선택될 수 있도록 하였습니다. 


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

> 나이


※ 숫자만 입력 해 주세요.


몇 살 이상을 검색하시겠습니까? 20

몇 살 이하을 검색하시겠습니까? 23


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

  test7    19960907    B   01066666666  서울

  test8    19971018    B   01077777777  인천

  test9    19981129    A   01088888888  대전

-----------------------------------------------



# 3-3-3. 검색 기준: 소속


elif con == '소속':

print("\n검색하실 수강 그룹을 입력해 주세요. (A/B/C)")

con2 = input("> ")

sql = "SELECT * FROM student WHERE team = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


저장된 데이터의 나이로 부터 생년월일(YYYYMMDD)을 추출하기 위해 오늘 자 년, 월, 일을 알려주는 'datetime'를 이용하였습니다. 추출된 연도 범위 안의 수강생을 출력하기 위해 'where'절에서 'left'를 이용하여 추출한 연도 4자리가 해당 범위에 속하는 학생만 선택될 수 있도록 하였습니다. 


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (A/B/C)

> B


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

  test3    19920523    B   01022222222  수원

  test7    19960907    B   01066666666  서울

  test8    19971018    B   01077777777  인천

-----------------------------------------------



# 3-3-4. 검색 기준: 전화번호


elif con == '전화번호':

print("\n검색하실 전화번호을 입력해 주세요. (숫자만 입력 해 주세요.)")

con2 = input("> ")

sql = "SELECT * FROM student WHERE phone = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

> 전화번호


검색하실 전화번호을 입력해 주세요. (숫자만 입력 해 주세요.)

> 01055555555


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

  test6    19950826    C   01055555555  대구

-----------------------------------------------



# 3-3-5. 검색 기준: 거주지


elif con == '거주지':

print("\n검색하실 거주지를 입력해 주세요.")

con2 = input("> ")

sql = "SELECT * FROM student WHERE address = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

> 거주지


검색하실 거주지를 입력해 주세요.

> 서울


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

  test1    19900301    A   01000000000  서울

  test7    19960907    B   01066666666  서울

-----------------------------------------------


# 4-1. 데이터 입력하기(insert)


elif cmd == 'i':

name = input("수강생 이름: ")

birth = input("생년월일(숫자 8자리): ")

team = input("소속 그룹(A/B/C): ")

phone = input("전화번호(숫자 11자리): ")

address = input("거주지: ")

sql = "INSERT INTO student VALUES('{}',{},'{}','{}','{}')".format(name, birth, team, phone, address)

cursor.execute(sql)

connect.commit()

print("해당 데이터의 입력이 완료되었습니다.")


입력 시 필요한 데이터를 'input'으로 받아 쿼리문을 완성, 전달했습니다. 이후 데이터 입력(insert) 후 DB 변동 사항을 저장하기 위하여 'connect.commit' 메소드를 사용했습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): i


수강생 이름: test0

생년월일(숫자 8자리): 19991230

소속 그룹(A/B/C): C

전화번호(숫자 11자리): 01099999999

거주지: 대전

해당 데이터의 입력이 완료되었습니다.


파일을 실행시켜 명령어 'i'를 이용해 'test0'에 해당하는 데이터를 입력(insert)했습니다. 모든 데이터 조회를 실행하면 이전에는 없었던 데이터가 잘 들어가 있는 것을 확인할 수 있습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): a


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지   

-----------------------------------------------

  test1    19900301    A   01000000000  서울

  test2    19910412    A   01011111111  인천

  test3    19920523    B   01022222222  수원

  test4    19930604    A   01033333333  대전

  test5    19940715    C   01044444444  부산

  test6    19950826    C   01055555555  대구

  test7    19960907    B   01066666666  서울

  test8    19971018    B   01077777777  인천

  test9    19981129    A   01088888888  대전

  test0    19991230    C   01099999999  대전

-----------------------------------------------




# 4-2. 데이터 삭제하기(delete)


elif cmd == 'i':

print("※ 수강생 삭제는 전화번호를 통해서만 가능합니다.")

phone = input("목록에서 삭제할 수강생의 전화번호(숫자 11자리): ")

sql = "DELETE FROM student WHERE phone = '{}')".format(phone)

cursor.execute(sql)

connect.commit()

print("해당 데이터의 삭제가 완료되었습니다.")


삭제 시 필요한 데이터를 'input'으로 받아 쿼리문을 완성, 전달했습니다. 이름, 생년월일처럼 중복된 값이 들어올 가능성이 없는 전화번호를 KEY로 사용하였습니다. 또한 데이터 입력(insert)과 마찬가지로 DB 변동 사항을 저장하기 위하여 'connect.commit' 메소드를 사용했습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): d


※ 수강생 삭제는 전화번호를 통해서만 가능합니다.

목록에서 삭제할 수강생의 전화번호(숫자 11자리): 01099999999

해당 데이터의 삭제가 완료되었습니다.


파일을 실행시켜 명령어 'd'를 이용해 위해서 추가한 데이터를 제거(delete)했습니다. 모든 데이터 조회를 실행하면 생성되었던 데이터가 사라진 것을 확인할 수 있습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): a


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지   

-----------------------------------------------

  test1    19900301    A   01000000000  서울

  test2    19910412    A   01011111111  인천

  test3    19920523    B   01022222222  수원

  test4    19930604    A   01033333333  대전

  test5    19940715    C   01044444444  부산

  test6    19950826    C   01055555555  대구

  test7    19960907    B   01066666666  서울

  test8    19971018    B   01077777777  인천

  test9    19981129    A   01088888888  대전

-----------------------------------------------


# 5-1. 데이터 변경하기(revise)


elif cmd == 'r':

print("※ 정보를 변경할 수강생의 선택은 전화번호를 통해서만 가능합니다.")

phone = input("전화번호(숫자 11자리): ")

sql = "SELECT * FROM student WHERE phone = '{}')".format(phone)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)

con = input("\n어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? ")


데이터 삭제 때와 마찬가지로 이름, 생년월일처럼 중복된 값이 들어올 가능성이 없는 전화번호를 KEY로 입력받아 사용하였습니다. 또한 변경 대상이 맞는 지 확인할 수 있도록 입력 받은 KEY값을 가진 데이터를 출력해주는 코드를 추가하였습니다. 


데이터 변경의 경우 특정 칼럼을 각각 변경할 수 있도록 아래와 같은 구조로 'if문'을 사용했습니다.


elif cmd == 'r':

con = input("\n어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? ")

if con == '이름': <code>

elif con == '생년월일': <code>

elif con == '소속': <code>

elif con == '전화번호': <code>

elif con == '거주지': <code>



# 5-1-1. 변경 대상: 이름


if con == '이름':

print("\n해당 수강생의 이름을 무엇으로 수정하시겠습니까?")

name = input("> ")

sql = "UPDATE student SET name = '{}' where phone = '{}'".format(name, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")


전화번호가 '01000000000'인 학생의 이름을 'student1'로 변경한 뒤 조회해보겠습니다.


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): r


※ 정보를 변경할 수강생의 선택은 전화번호를 통해서만 가능합니다.

전화번호(숫자 11자리): 01000000000


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

  test1    19900301    A   01000000000  서울

-----------------------------------------------

어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? 이름


해당 수강생의 이름을 무엇으로 수정하시겠습니까?

> student1


정보 변경이 완료되었습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

> 전화번호


검색하실 전화번호을 입력해 주세요. (숫자만 입력 해 주세요.)

> 01000000000


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   19900301    A   01000000000  서울

-----------------------------------------------



# 5-1-2. 변경 대상: 생년월일


elif con == '생년월일':

print("해당 수강생의 생년월일을 무엇으로 수정하시겠습니까? (숫자 8자리)")

birth = input("> ")

sql = "UPDATE student SET birth = '{}' where phone = '{}'".format(birth, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")


전화번호가 '01000000000'인 학생의 생년월일을 '20180101'로 변경한 뒤 조회해보겠습니다.


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): r


※ 정보를 변경할 수강생의 선택은 전화번호를 통해서만 가능합니다.

전화번호(숫자 11자리): 01000000000


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   19900301    A   01000000000  서울

-----------------------------------------------

어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? 생년월일


해당 수강생의 생년월일을 무엇으로 수정하시겠습니까?

> 20180101


정보 변경이 완료되었습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

> 나이


※ 숫자만 입력 해 주세요.


몇 살 이상을 검색하시겠습니까? 1

몇 살 이하을 검색하시겠습니까? 1


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   20180101    A   01000000000  서울

-----------------------------------------------



# 5-1-3. 변경 대상: 소속


elif con == '소속':

print("\n해당 수강생의 소속을 무엇으로 수정하시겠습니까? (A/B/C)")

team = input("> ")

sql = "UPDATE student SET team = '{}' where phone = '{}'".format(team, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")


전화번호가 '01000000000'인 학생의 소속을 변경한 뒤 조회해보겠습니다.


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): r


※ 정보를 변경할 수강생의 선택은 전화번호를 통해서만 가능합니다.

전화번호(숫자 11자리): 01000000000


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   20180101    A   01000000000  서울

-----------------------------------------------

어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? 소속


해당 수강생의 소속을 무엇으로 수정하시겠습니까? (A/B/C)

B


정보 변경이 완료되었습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

전화번호


검색하실 전화번호을 입력해 주세요. (숫자만 입력 해 주세요.)

> 01000000000


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   20180101    B   01000000000  서울

-----------------------------------------------



# 5-1-4. 변경 대상: 전화번호


elif con == '전화번호':

print("\n해당 수강생의 전화번호를 무엇으로 수정하시겠습니까? (숫자 11자리)")

new_phone = input("> ")

sql = "UPDATE student SET phone = '{}' where phone = '{}'".format(new_phone, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")


전화번호가 '01000000000'인 학생의 전화번호를 '01012345678'로 변경한 뒤 조회해보겠습니다.


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): r


※ 정보를 변경할 수강생의 선택은 전화번호를 통해서만 가능합니다.

전화번호(숫자 11자리): 01000000000


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   20180101    B   01000000000  서울

-----------------------------------------------


어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? 전화번호


해당 수강생의 전화번호를 무엇으로 수정하시겠습니까? (숫자 11자리)

> 01012345678


정보 변경이 완료되었습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

이름


검색하실 수강생의 이름을 입력해 주세요.

> student1


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   20180101    B   01012345678  서울

-----------------------------------------------



# 5-1-4. 변경 대상: 거주지


elif con == '거주지':

print("\n해당 수강생의 거주지를 어디로 수정하시겠습니까? ")

address = input("> ")

sql = "UPDATE student SET address = '{}' where phone = '{}'".format(address, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")


전화번호가 '01012345678'인 학생의 거주지를 '수원'으로 변경한 뒤 조회해보겠습니다.


\Users\Project> python project02.py

***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): r


※ 정보를 변경할 수강생의 선택은 전화번호를 통해서만 가능합니다.

전화번호(숫자 11자리): 01012345678


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   20180101    B   01012345678  서울

-----------------------------------------------


어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? 거주지


해당 수강생의 거주지를 어디로 수정하시겠습니까?

수원


정보 변경이 완료되었습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): f


무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)

거주지


검색하실 거주지를 입력해 주세요.

> 수원


-----------------------------------------------

   이름     생년월일   소속   전화번호    거주지

-----------------------------------------------

student1   20180101    B   01012345678  수원

  test3    19920523    B   01022222222  수원

-----------------------------------------------


# 6-1. 프로그램 종료하기 (quit)


elif cmd == 'q':

connect.commit()

print("프로그램을 종료합니다.")


프로그램 종료 시에는 특별한 것 없이 'commit'만 한번 더 해주었습니다.


***사용 가능 명령어 리스트***

a  : 모든 데이터 조회(all)

f  : 조건에 맞는 데이터만 조회(find)

i  : 수강생 입력(insert)

d  : 수강생 삭제(delete)

r  : 정보 변경(revise)

q  : 저장하고 나가기(quit)


command(명령어 입력): q


프로그램을 종료합니다.




# 6-2. 프로그램 전체 코드


def print_result(result):

print("\n------------------------------------------------------------------------")

cnames = ['이름', '생년월일', '소속', '전화번호', '거주지']

for c in cnames:

print(c.center(11, ' '), end='\t')

print("\n------------------------------------------------------------------------")

ccodes = ['name', 'birth', 'team', 'phone', 'address']

for r in result:

for c in ccodes:

print(str(r[c]).center(11, ' '), end='\t')

print("")

print("------------------------------------------------------------------------")


u = input("계정명: ")

p = input("패스워드: ")


import pymysql

connect = pymysql.connect(host='localhost', user=u, password=p, db='test', charset='utf8')

cursor = connect.cursor(pymysql.cursors.DictCursor)


cmd = 'na'

while cmd != 'q':


print("\n***사용 가능 명령어 리스트***")

print("a  : 모든 데이터 조회(all)")

print("f  : 조건에 맞는 데이터만 조회(find)")

print("i  : 수강생 입력(insert)")

print("d  : 수강생 삭제(delete)")

print("r  : 정보 변경(revise)")

print("q  : 저장하고 나가기(quit)\n")

cmd = input("command(명령어 입력): ")

print("")


if cmd == 'a':

sql = "SELECT * FROM student"

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


elif cmd == 'f':

print("무엇을 기준으로 검색하시겠습니까? (이름/나이/소속/전화번호/거주지)")

con = input("> ")

if con == '이름':

print("\n검색하실 수강생의 이름을 입력해 주세요.")

con2 = input("> ")

sql = "SELECT * FROM student WHERE name = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)

elif con == '나이':

print("\n※ 숫자만 입력 해 주세요.\n")

input_age1 = int(input("몇 살 이상을 검색하시겠습니까? "))

input_age2 = int(input("몇 살 이하을 검색하시겠습니까? "))

import datetime, time

d = datetime.date.today()

year1 = d.year - input_age2 + 1

year2 = d.year - input_age1 + 1

sql = "SELECT * FROM student WHERE LEFT(birth, 4) BETWEEN {} AND {}".format(year1, year2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)

elif con == '소속':

print("\n검색하실 수강 그룹을 입력해 주세요. (A/B/C)")

con2 = input("> ")

sql = "SELECT * FROM student WHERE team = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)

elif con == '전화번호':

print("\n검색하실 전화번호을 입력해 주세요. (숫자만 입력 해 주세요.)")

con2 = input("> ")

sql = "SELECT * FROM student WHERE phone = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)

elif con == '거주지':

print("\n검색하실 거주지를 입력해 주세요.")

con2 = input("> ")

sql = "SELECT * FROM student WHERE address = '{}'".format(con2)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)


elif cmd == 'i':

name = input("수강생 이름: ")

birth = input("생년월일(숫자 8자리): ")

team = input("소속 그룹(A/B/C): ")

phone = input("전화번호(숫자 11자리): ")

address = input("거주지: ")

sql = "INSERT INTO student VALUES('{}',{},'{}','{}','{}')".format(name, birth, team, phone, address)

cursor.execute(sql)

connect.commit()

print("해당 데이터의 입력이 완료되었습니다.")


elif cmd == 'd':

print("※ 수강생 삭제는 전화번호를 통해서만 가능합니다.")

phone = input("목록에서 삭제할 수강생의 전화번호(숫자 11자리): ")

sql = "DELETE FROM student WHERE phone = '{}')".format(phone)

cursor.execute(sql)

connect.commit()

print("해당 데이터의 삭제가 완료되었습니다.")


elif cmd == 'r':

print("※ 정보를 변경할 수강생의 선택은 전화번호를 통해서만 가능합니다.")

phone = input("전화번호(숫자 11자리): ")

sql = "SELECT * FROM student WHERE phone = '{}')".format(phone)

cursor.execute(sql)

result = cursor.fetchall()

print_result(result)

con = input("\n어떤 정보를 변경하시겠습니까(이름/생년월일/소속/전화번호/거주지)? ")    

if con == '이름':

print("\n해당 수강생의 이름을 무엇으로 수정하시겠습니까?")

name = input("> ")

sql = "UPDATE student SET name = '{}' where phone = '{}'".format(name, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")

elif con == '생년월일':

print("해당 수강생의 생년월일을 무엇으로 수정하시겠습니까? (숫자 8자리)")

birth = input("> ")

sql = "UPDATE student SET birth = '{}' where phone = '{}'".format(birth, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")

elif con == '소속':

print("\n해당 수강생의 소속을 무엇으로 수정하시겠습니까? (A/B/C)")

team = input("> ")

sql = "UPDATE student SET team = '{}' where phone = '{}'".format(team, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")

elif con == '전화번호':

print("\n해당 수강생의 전화번호를 무엇으로 수정하시겠습니까? (숫자 11자리)")

new_phone = input("> ")

sql = "UPDATE student SET phone = '{}' where phone = '{}'".format(new_phone, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")

elif con == '거주지':

print("\n해당 수강생의 거주지를 어디로 수정하시겠습니까? ")

address = input("> ")

sql = "UPDATE student SET address = '{}' where phone = '{}'".format(address, phone)

cursor.execute(sql)

result = cursor.fetchall()

connect.commit()

print("\n정보 변경이 완료되었습니다.")


elif cmd == 'q':

connect.commit()

print("프로그램을 종료합니다.")


else:

print("잘못된 명령어가 입력되었습니다. 다시 입력해 주세요.")


+ Recent posts