https://sdesign416.tistory.com/44
[Python MySQL] Python에서 MySQL 연결하고 데이터 조회하기
Python 설치부터 VSCode, Jupyter, venv설정까지파이썬을 시작하기 앞서가장 중요한 것은 개발환경 설정이다. Python 설치, VSCode 확장 프로그램, venv 가상환경까지 한 번에 등장하다보니각 역할이 무엇인
sdesign416.tistory.com
1) 회원가입 프로그램 만들기 (INSERT)
- 정보는 input함수로 입력받는다.
- 반복문을 사용하여 여러 회원을 가입받을 수 있도록 한다.
- 추가 가입 여부를 물은 후 y를 입력 시 추가 회원가입을 진행한다.
1_1) 기본 조건
# 데이터베이스 사용 선언
import MySQLdb
# 데이터베이스 연결
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
# 커서 생성 (SQL 실행 객체)
cur = db.cursor()
1_2) SQL문 작성
회원가입은 데이터를 추가하는것이기 때문에 INSERT 사용
sql = "insert into Mytest (userid, userpw, name, hp, email, gender, ssn1, ssn2, zipcode, address1, address2, address3)
values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
1_3) data값 추가
실제로 넣을 data값 입력
data = (userid, userpw, name, hp, email, gender, ssn1, ssn2, zipcode, address1, address2, address3)
1_4) 반영, 성공메세지 출력
# SQL 실행 : 데이터베이스에 전달
cur.execute(sql, data)
# 실제 DB에 변경사항 반영
db.commit()
# 출력
print("가입되었습니다!")
1_5) 추가 가입 여부
yn = input('추가로 가입하시겠습니까? (y/n): ')
if yn.lower() == 'n':
# n입력 : 종료 = 추가가입 없다는 뜻
print('프로그램을 종료합니다')
break
💡 최종코드
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur = db.cursor()
while True:
try:
userid = input('아이디를 입력하세요: ')
userpw = input('비밀번호를 입력하세요: ')
name = input('이름을 입력하세요: ')
hp = input('전화번호를 입력하세요: ')
email = input('이메일을 입력하세요: ')
ssn1 = input('주민등록번호 앞자리를 입력하세요: ')
ssn2 = input('주민등록번호 뒷자리를 입력하세요: ')
zipcode = input('우편번호를 입력하세요: ')
address1 = input('주소를 입력하세요: ')
address2 = input('상세주소를 입력하세요: ')
address3 = input('참고사항 입력하세요: ')
gender = input('성별을 입력하세요(남자 또는 여자): ')
sql = "insert into Mytest (userid, userpw, name, hp, email, gender, ssn1, ssn2, zipcode, address1, address2, address3) values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
data = (userid, userpw, name, hp, email, gender, ssn1, ssn2, zipcode, address1, address2, address3)
cur.execute(sql, data)
db.commit()
print('가입되었습니다!')
yn = input('추가로 가입하시겠습니까? (y/n): ')
if yn.lower() == 'n':
print('프로그램을 종료합니다')
break
except Exception as e:
print('다시 입력하세요')
cur.close()
db.close()
실행결과 예시▶

2) 로그인 프로그램 만들기_기본 (SELECT)
- 아이디와 비밀번호를 입력받아 로그인을 한다.
- 기본조건은 회원가입 프로그램과 동일하다.
2_1) 아이디, 비밀번호 입력받기
# 사용자 입력 (아이디)
userid = input('아이디를 입력하세요')
# 사용자 입력 (비밀번호)
userpw = input('비밀번호를 입력하세요')
2_2) 로그인 확인하기
select를 활용하여 입력받은 정보가 있는지 없는지 조회
# 아이디 + 비밀번호 일치하는 idx 조회하기
sql = "select idx from Mytest where userid=%s and userpw=%s"
2_3) 데이터추가, 결과 개수 반환
SELECT 문으로 확인 한 데이터의 값을 data에 넣고(튜플 형태로 전달받음)
SQL을 실행하여 결과 행 개수를 반환한다.
# SQL에 데이터 추가
data = (userid, userpw)
# SQL 실행 : 결과 행 개수 반환
result = cur.execute(sql, data)
2_4) 로그인 성공, 실패 여부
result의 결과값이 1개 이상이면 값이 있어 로그인 성공으로 처리됨
# 결과가 1개 이상이면 로그인 성공
if result > 0:
# 로그인 성공 메시지
print('로그인 되었습니다')
else:
# 실패 메시지
print('아이디 또는 비밀번호를 확인하세요')
💡 최종코드
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur = db.cursor()
userid = input('아이디를 입력하세요')
userpw = input('비밀번호를 입력하세요')
sql = "select idx from Mytest where userid=%s and userpw=%s"
data = (userid, userpw)
result = cur.execute(sql, data)
if result > 0:
print('로그인 되었습니다')
else:
print('아이디 또는 비밀번호를 확인하세요')
cur.close()
db.close()
실행결과 예시▶

3) 💡로그인 프로그램 만들기(최대 5회 시도가능)
위 최종 코드는 로그인을 실패하면 그대로 프로그램이 종료된다.
실제 프로그램이 돌아가는 것 처럼 최대 5번까지 값을 입력받도록 기능을 추가하고
5번 모두 실패할 경우에만 프로그램이 종료되도록 프로그램 업그레이드한다.
3_1) 시도횟수, 로그인 성공 여부 저장할 변수
# 시도 횟수
count = 0
# 로그인 성공 여부
success = False
3_2) while문 조건추가 + 몇회 시도하는지 print 출력
while문에 count 변수를 사용하여 5회까지만 실행되도록 수정하고
반복문을 실행할 때 현재 몇번째 로그인을 시도하고 있는데 print로 출력한다.
while count < 5:
print(f"\n[{count+1}/5] 로그인 시도")
3_3) 로그인 성공 시 success 값 변경, 로그인 실패 시 count증가
처음 지정하였던 변수들의 값을
로그인을 성공하면 success = True 로 변경하고
로그인을 실패하면 count가 1 증가하도록 설정한다.
# result값이 0보다 크면 로그인 성공
if result > 0:
print('로그인 되었습니다')
# 로그인 성공 : 변수 값 변경
success = True
break
# 로그인 실패
else:
print('아이디 또는 비밀번호를 확인하세요')
# 실패했을 때만 증가
count += 1
3_4) 5번 모두 로그인 실패했을 경우
5번 모두 로그인에 실패하여 success값이 여전히 False인 경우
if not success:
print("\n5번 모두 실패했습니다. 로그인 불가")
💡 최종코드
import MySQLdb
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur = db.cursor()
success = False
for i in range(5):
print(f"\n[{i+1}/5] 로그인 시도")
userid = input('아이디를 입력하세요: ')
userpw = input('비밀번호를 입력하세요: ')
sql = "select idx from Mytest where userid=%s and userpw=%s"
data = (userid, userpw)
result = cur.execute(sql, data)
if result > 0:
print('로그인 되었습니다')
success = True
break
else:
print('아이디 또는 비밀번호를 확인하세요')
if not success:
print("\n5번 모두 실패했습니다. 로그인 불가")
cur.close()
db.close()
실행결과 예시▶

4) 회원 정보 수정 프로그램 (UPDATE)
- 기본조건은 회원가입 프로그램과 동일하다.
- 수정할 회원의 아이디를 입력받은 후 회원 정보를 수정한다.
- 반복문 사용, 추가로 수정 할 회원이 있는지 물은 후 y를 입력하면 추가수정을 진행한다.
📌 회원가입과 다른 차이점
회원가입(INSERT)는 새로운 행 데이터를 추가하는것이며 PK가 중복되면 실패처리 된다.
하지만 회원수정(UPDATE)는 기존 데이터를 수정하는것이기 때문에 기준 값이 필요하며(userid) PK중복과는 상관이 없다.
※ where가 꼭 필요하다! > 없을 경우 모든 데이터가 수정됨
4_1) SQL문 작성 (where절 사용)
# update를 사용하여 정보를 수정한다.
# 마지막에 where절을 사용해 입력받은 userid의 데이터만 수정하도록 조건을 추가한다.
sql = "update Mytest set name=%s, hp=%s, email=%s, ssn1=%s, ssn2=%s, zipcode=%s, address1=%s, address2=%s, address3=%s, gender=%s
where userid=%s"
4_2) 변경 성공여부 출력
result값이 0 이상이면 변경된 값이 있으므로 변경되었다고 출력한다.
result = cur.execute(sql, data)
db.commit()
if result > 0:
print('변경되었습니다')
else:
print('에러!')
💡 최종코드
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 Mytest set name=%s, hp=%s, email=%s, ssn1=%s, ssn2=%s, zipcode=%s, address1=%s, address2=%s, address3=%s, gender=%s where userid=%s"
data = (name, hp, email, ssn1, ssn2, zipcode, address1, address2, address3, gender, userid)
result = cur.execute(sql, data)
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()
실행결과 예시▶

5) 회원 탈퇴 프로그램 (DELETE)
- 탈퇴할 회원의 아이디를 입력받아 일치하는 데이터를 삭제한다.
- 특정 회원만 삭제하기 위해 회원 정보 수정과 동일하게 where절을 실행한다.
- 데이터 삭제 후 정상적으로 처리되었음을 출력하고 프로그램 종료
5_1) 탈퇴 할 아이디 입력받기
userid = input('탈퇴할 아이디를 입력하세요: ')
5_2) SQL문 실행 (where, 튜플형태)
데이터를 삭제하기 위해 DELETE문을 사용하며,
uesrid라는 값이 한개이지만 튜플 형태로 인식하기 위해 콤마를 붙여 사용한다.
# delete문에 조건붙여 사용
sql = 'delete from Mytest where userid=%s'
# (userid,) : 튜플형태로 반환하기 위해 콤마 추가
result = cur.execute(sql, (userid,))
💡 최종코드
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur = db.cursor()
userid = input('탈퇴할 아이디를 입력하세요: ')
sql = 'delete from Mytest where userid=%s'
result = cur.execute(sql, (userid,))
db.commit()
if result > 0:
print('탈퇴되었습니다')
else:
print('오류')
cur.close()
db.close()
6) 💡회원 탈퇴 프로그램(try-except추가, 정말 삭제할지 되묻기)
위 최종 코드는 try-except가 빠져있어
외래키같이 다른 테이블에 참조외어있는 데이터를 선택하여 삭제할 수 없는 코드이다.
또한 삭제직전에 정말 삭제할지 여부를 묻는 기능을 추가하여 실제 프로그램처럼 작동하도록 수정한다.
6_1) while문으로 변경, try-except 추가
참조되어있는 데이터 삭제시도 시 에러 발생을 막기 위해 try-except를 사용한다.
while True:
try:
...
except Exception as e:
...
6_2) except문 rollbak() 추가
에러가 발생할 경우 db.rollback()을 실행하여
작업중이던 데이터베이스 상태를 안전하게 명령 실행 전으로 되돌리고
print로 오류사항을 출력한다.
※ rollback() : 실수로 테이블을 수정하거나 삭제했을 때, COMMIT을 실행하기 전이라면 ROLLBACK으로 데이터를 복구할 수 있다. (Ctrl+Z역할)
db.rollback()
print('오류: 다른 데이터(테이블)와 연결되어 있어 탈퇴가 불가능합니다.')
💡 최종코드
import MySQLdb
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='ai')
cur = db.cursor()
while True:
try:
userid = input('탈퇴할 아이디를 입력하세요: ')
sql = 'delete from Mytest where userid=%s'
result = cur.execute(sql, (userid,))
db.commit() # 정상 처리 시 최종 반영
if result > 0:
print('탈퇴되었습니다.')
else:
print('해당 아이디가 존재하지 않습니다.')
except Exception as e:
db.rollback()
print('오류: 다른 데이터(테이블)와 연결되어 있어 탈퇴가 불가능합니다.')
yn = input('추가로 탈퇴하시겠습니까? (y/n): ')
if yn.lower() == 'n':
print('프로그램을 종료합니다')
break
cur.close()
db.close()
실행결과 예시▶ 1. 참조되어있는 데이터 삭제 시도

실행결과 예시▶ 2. 참조되어있지 않은 데이터 삭제 시도

'Python > Database' 카테고리의 다른 글
| [단어장 프로그램 복습] 데이터 저장 클래스를 사용하는 이유 (0) | 2026.06.11 |
|---|---|
| [Python MySQL] MySQL을 활용한 단어장 프로그램 만들기 (0) | 2026.06.09 |
| [Python MySQL] Python에서 MySQL 연결하고 데이터 조회, 추가하기 (0) | 2026.06.09 |