데이터 분석

Python과 MySQL을 연동해서 회원 관리 기능 구현해보기

cinnamonbrown 2026. 6. 9. 19:56

회원가입 프로그램 예제

Python과 MySQL을 연동해서 간단한 회원가입 프로그램을 구현해보았다.

 

이전까지는 MySQL Workbench에서 SQL문만 실행해봤다면, 이번에는 파이썬에서 직접 SQL문을 작성하고 실행하는 방식을 연습해 보았다.

 

이번 실습을 통해 cursor(), execute(), commit()이 각각 어떤 역할을 하는지 조금씩 이해할 수 있게 되었다.


 

🔨 MySQL과 Python 연결 설정

어떤 작업을 하든 가장 먼저 Python과 MySQL을 연결해주는 과정이 필요하다.

import MySQLdb

 

👉 먼저 MySQL과 연결하기 위해 라이브러리를 import 해준다.

 

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur= db.cursor()

 

👉 MySQLdb.connect()를 통해 Python과 MySQL을 연결한다.
👉  db.cursor()를 통해 커서 객체를 만들어준다.


db가 MySQL과 연결된 통로라면, cur은 그 통로를 통해 SQL문을 보내는 역할이라고 이해했다.


🖐️  현재 member 테이블의 상태

 


1️⃣  회원가입

회원가입 기능에서는 사용자에게 아이디, 비밀번호, 이름, 전화번호, 이메일, 성별, 주민번호 등을 입력받고,

그 값을 member 테이블에 추가하도록 구현해보았다.


이때 사용자가 입력한 값들을 하나씩 변수에 저장한 뒤, data (튜플)로 묶어서 SQL문에 전달했다.

 

여기서는 userid가 carrot 인 회원을 추가해보았다.

💻 코드

db=MySQLdb.connect(host='localhost',user='root',password='1234', db='ai')

cur=db.cursor()

while True:

  # userid, userpw, name, hp, email ,gender ,ssn1, ssn2 를 추가
  userid = input('아이디를 입력하세요: ')
  userpw = input('비밀번호를 입력하세요: ')
  name = input('이름을 입력하세요: ')
  hp = input('전화번호를 입력하세요: ')
  email = input('이메일을 입력하세요: ')
  ssn1 = input('주민등록번호 앞자리를 입력하세요: ')
  ssn2 = input('주민등록번호 뒷자리를 입력하세요: ')

  gender = input('성별을 입력하세요(남자 또는 여자): ')
  sql = 'insert into member(userid, userpw, name, hp, email ,gender ,ssn1, ssn2) values( %s ,%s , %s, %s , %s , %s, %s ,%s)'


# data : 해당 정보를 가입할 때 추가한다
  data = (userid, userpw, name, hp, email ,gender ,ssn1, ssn2)

  result = cur.execute(sql, data)
  
  if result > 0:
    print('해당 회원이 추가되었습니다')
  else : print('에러 발생')

  yn = input('회원을 더 추가할까요? (y/n)')

  if yn.lower() == 'n' :
    print("회원가입을 중단합니다")
    break

  db.commit()

  cur.close()
  db.close()

실행결과

👉 execute(sql, data)

사용자가 입력한 데이터를 SQL문 안에 안전하게 넣어주는 방식

👉 db.commit()

execute()로 SQL문을 실행했다고 해서 바로 DB에 반영되는 것이 아니라, 마지막에 commit()을 해줘야 한다.


2️⃣ 로그인

로그인 기능에서는 사용자가 입력한 아이디와 비밀번호가 member 테이블에 존재하는지 확인할 수 있도록 했다.

where userid = %s and userpw = %s 

 

 👉 위 조건을 사용해서 아이디와 비밀번호가 모두 일치하는 회원이 조회되도록 했다.

 

💻  코드

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur = db.cursor() 

print("==== 로그인 ====")

# 아이디와 비밀번호를 입력 받아 -> data 튜플에 저장한다
userid = input("아이디 :")
userpw = input( "비밀번호 : ")
data = (userid, userpw)

sql = 'select userid from member where userid= %s and userpw= %s'

result= cur.execute(sql,data) # sql문 실행하고, 조회된 행의 개수를 result에 담는다

if result > 0 :
  print('로그인 성공했습니다')

else: 
  print('아이디와 비밀번호가 올바르지 않습니다.')

cur.close()
db.close()

 

👉 아이디에 carrot , 비밀번호에 2222 를 입력했더니 다음과 같이 실행결과가 나왔다.

 

 

👉 cur.execute(sql,data)

 

조건에 맞는 데이터가 몇 개 조회되는 지 결과값으로 받을 수 있다.

 

그래서 result > 0 이면 로그인 성공이고 그렇지 않으면 실패로 처리하도록 했다.


3️⃣ 회원정보 수정하기

회원정보 수정 기능에서는 특정 회원의 정보를 다시 입력받아 기존 데이터를 변경하도록 구현했다.

테스트를 위해 carrot 회원의 정보를 수정해보았다.

🔽 수정 전 회원정보

 

💻 코드

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur= db.cursor()

while True:
  try:

   # 변경할 회원 정보
    userid = input('변경할 아이디를 입력하세요: ')


     ## 변경할 것들 
    name = input('이름을 입력하세요: ')
    hp = input('전화번호를 입력하세요: ')
    email = input('이메일을 입력하세요: ')
    ssn1 = input('주민등록번호 앞자리를 입력하세요: ')
    ssn2 = input('주민등록번호 뒷자리를 입력하세요: ')
    zipcode = input('우편번호를 입력하세요: ')
    address1 = input('주소를 입력하세요: ')
    address2 = input('상세주소를 입력하세요: ')
    address3 = input('참고사항 입력하세요: ')
    gender = input('성별을 입력하세요(남자 또는 여자): ')

    sql= 'update member set name=%s , hp=%s, email= %s, ssn1=%s, ssn2=%s, zipcode=%s, address1= %s , address2=%s ,address3=%s, gender=%s where userid=%s'

    changed=(name,hp,email,ssn1,ssn2,zipcode,address1,address2,address3,gender,userid)

    result= cur.execute(sql,changed)
    db.commit()

    if result >0 : print('수정이 완료되었습니다')
    else: print("에러 발생!")

    yn=input('더 수정하고 싶은 회원정보가 있나요? (y/n)')

    if yn.lower() =='n':
      print('회원정보 수정을 종료합니다')
      break


  except Exception as e:
    print('다시 입력하세요')

cur.close()
db.close()

👉 db.commit()

수정 후에도 db.commit()을 실행해주어야 변경된 내용이 실제 데이터베이스에 반영된다.


실행결과 – carrot 회원의 정보가 수정되었음


4️⃣ 회원 탈퇴

회원 탈퇴 기능에서는 입력받은 userid를 기준으로 해당 회원 데이터를 삭제하도록 구현했다.

 

💻  코드

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur= db.cursor()

userid= input('탈퇴할 아이디를 입력하세요')
sql ='delete from member where userid = %s'

result=cur.execute(sql,(userid,)) # tuple로 전달해야 하는것 잊지 말것!(실수 주의) 

db.commit()

if result > 0 : 
  print('탈퇴되었습니다')

else: 
  print('error')

cur.close()
db.close()

👉 execute()할 때 주의

execute()에 값을 전달할 때 userid 하나만 넘기더라도

(userid,)

처럼 튜플 형태로 값을 전달야 함을 유의하자!!

 

 

만약,

(userid)

 

처럼 전달하면 이는 튜플이 아니라 그냥 문자열로 인식되기 때문에 주의해야 한다.

 

실행결과

 

👉 carrot 을 삭제해보았을 때 db에서 결과를 확인해보니 userid가 carrot인 데이터가 삭제되었다.