-
파이썬 DB연결 회원관리 프로그램 (웹X, 콘솔구현)일단 만들기 2022. 2. 15. 22:48
MySQL, 파이썬(IDE 파이참)을 이용, DB연동 후 회원관리 프로그램 콘솔에서 구현하기.
자바로 했을 때랑 구현 방식은 거의 같다고 느껴지지만...
파이썬이 문법은 더 쉽다고 생각은 하지만...
그래도 여전히 머리에서 정리가 잘 안되는 프로그램 구현하기
코드 쓰면서 배우고
오류나면 해결하면서 배우고
복붙하면서 배우고
구글링하면서 배우고~!
구현할 기능들 :
<회원관리>
회원가입
로그인
내정보확인 / 수정
로그아웃
탈퇴
일단 MySQL 워크벤치에서 스케마 DB만들어주고...
create table member( id varchar(20) primary key, pwd varchar(20), name varchar(20), email varchar(50) );
파이참으로 파이썬 코드를 작성한다.
디렉토리 구성은 이렇게 했다.
__init__.py
#__init__.py __all__=[ 'vo', 'dao_db.py', 'service', 'menu' ]
dao_db.py
#dao_db.py import pymysql from member.vo import Member #Dao class MemberDao: def __init__(self): self.conn = None def connect(self): self.conn = pymysql.connect(host='localhost', user='아이디', password='비번', db='연결할 디비 이름', charset='utf8') def disconn(self): self.conn.close() # 추가 메서드 def insert(self, a:Member): #1. db 커넥션 수립 self.connect() # 2. 사용할 cursor객체 생성. db 작업 메서드가 이 클래스에 정의되어 있으므로 꼭 필요. cursor = self.conn.cursor() # 3. 실행할 sql문 정의 sql = 'insert into member(id, pwd, name, email) values(%s, %s, %s, %s)' # 4. sql 문에 %s를 사용했다면 각 자리에 들어갈 값을 튜플로 정의 d = (a.id, a.pwd, a.name, a.email) # 5. sql 실행(실행할 sql, %s매칭한 튜플) cursor.execute(sql, d) # 6. 쓰기동작(insert, update, delete) 에서 쓰기 완료 self.conn.commit() # db 커넥션 끊음 self.disconn() # 검색 메서드 def select(self, id:str): #num(pk) 기준 검색. 1개 검색 try: self.connect() #db 연결 cursor = self.conn.cursor() #사용할 커서 객체 생성 sql = 'select * from member where id=%s' d = (id,) cursor.execute(sql, d) #sql 실행 row = cursor.fetchone() #fetchone(): 현재 커서 위치의 한줄 추출 if row: return Member(row[0], row[1], row[2], row[3]) except Exception as e: print(e) finally: self.disconn() # 검색 메서드 def selectByName(self, name:str): #name 기준 검색. 여러개 검색 try: self.connect() # db연결 cursor = self.conn.cursor() # 사용할 커서 객체 생성 sql = 'select*from member where name like %s' d = (name,) cursor.execute(sql, d) # sql 실행 res =[Member(row[0], row[1], row[2], row[3]) for row in cursor] return res except Exception as e: print(e) finally: self.disconn() # 삭제(name) def delete(self, id:str): try: self.connect() cursor = self.conn.cursor() sql = 'delete from member where id = %s' d = (id,) cursor.execute(sql, d) self.conn.commit() return print('삭제가 완료되었습니다.') except Exception as e: print(e) finally: self.disconn() def update(self, a:Member): try: self.connect() cursor = self.conn.cursor() sql = 'update member set pwd=%s, name=%s, email=%s where id=%s' d = (a.pwd, a.name, a.email, a.id) cursor.execute(sql, d) self.conn.commit() return print('수정 완료') except Exception as e: print(e) finally: self.disconn() def selectAll(self): try: self.connect() cursor = self.conn.cursor() sql = 'select * from member' cursor.execute(sql) res = [Member(row[0], row[1], row[2], row[3]) for row in cursor] return res except Exception as e: print(e) finally: self.disconn()
menu.py
#menu.py from member.service import MemberService class Menu: def __init__(self): self.service=MemberService() def run(self): while True: m = input('1.회원가입 2.로그인 3.내 정보확인/수정 4.로그아웃 5.탈퇴 6.종료 \n') if m=='1': self.service.addMember() elif m=='2': self.service.login() elif m=='3': self.service.printMyInfo() elif m=='4': self.service.logout() elif m=='5': self.service.delMember() elif m=='6': break if __name__ == '__main__': m = Menu() m.run()
service.py
#service.py from member.vo import Member from member.dao_db import MemberDao # service class MemberService: loginId = '' def __init__(self): self.dao=MemberDao() #추가. name 중복 허용 안됨 def addMember(self): print('=== 추가 ===') id = input('id:') pwd = input('pwd:') name = input('name:') email = input('email:') self.dao.insert(Member(id=id, pwd=pwd, name=name, email=email)) def getById(self): print('=== 아이디로 검색 ===') id = int(input('search id:')) a:Member = self.dao.select(id) if a == None: print('없는 번호') else: print(a) #검색: 검색할 이름을 입력받아서 dao로 검색한 결과 출력 def printMember(self): print('=== 이름으로 검색 ===') name = input('name:') res = self.dao.selectByName('%'+name+'%') if res==None: #중복 안됨 print('예외발생') elif len(res)==0: print('검색결과 없음') else: for i in res: print(i) #삭제 def delMember(self): print('=== 삭제 ===') if MemberService.loginId != '': print('로그인 하세요') return id = input('id:') self.dao.delete(id) #전체출력 def printAll(self): print('=== 전체출력 ===') data = self.dao.selectAll() for i in data: print(i) def login(self): if MemberService.loginId != '': print('이미 로그인중') return id=input('아이디 : ') a = self.dao.select(id) if a==None: print('없는 아이디') return else: pwd=input('패스워드 :') if pwd == a.pwd: MemberService.loginId = id print('로그인 성공') else: print('패스워드(이름) 불일치') def printMyInfo(self): #로그인 상태에서만 사용가능 if MemberService.loginId == '': print('로그인 먼저 하세요') return else: a=self.dao.select(MemberService.loginId) print(a) print('=== 수정 ===') # id = input('id:') # a:Member = self.dao.select(num) #수정전 데이터 검색 # # if a == None: # 중복 안됨 # print('가입되지 않았습니다') # else: s = ['pwd', 'name', 'email'] data=[input('new' + s[i]+':') for i in range(len(s))] for idx, i in enumerate(data): if i != '': #객체 멤버 변수 수정 a.__setattr__(s[idx], i) self.dao.update(a) def logout(self): if MemberService.loginId == '': print('로그인 먼저 하시오') return MemberService.loginId = '' print('로그아웃 완료!')
vo.py
#vo.py class Member: def __init__(self, id=None, pwd=None, name=None, email=None): self.id = id self.pwd = pwd self.name = name self.email = email def __str__(self): return 'id:'+self.id+', pwd:'+self.pwd+', name:'+self.name+', email:'+self.email
잘 구동되는 것을 확인했다 유후
'일단 만들기' 카테고리의 다른 글
공공데이터 (서울 버스 정보 API)이용해서 버스노선 프로그램 테스트 (0) 2022.02.28 파이썬 DB연결 게시판 기능 (웹X, 콘솔구현) (0) 2022.02.16 간단실습) 회원가입 양식 폼 만들기 (0) 2022.01.18 HTML,CSS,JS로 웹 그림판 만들기 완성 (코드) (0) 2022.01.04 HTML,CSS,JS(자바스크립트)로 웹 그림판 만들기 3 (0) 2022.01.03