1. mysqlclient
- 파이썬에서는 MySQL 서버와 통신할 수 있는 파이썬용 데이터베이스 커넥터의 종류가 여러가지 있음
- PyMySQL, mysqlclient를 가장 많이 사용함
- 사용법은 비슷하나 속도가 빠른 mysqlclient를 권장하고 있음
!pip install mysqlclient
import MySQLdb
# host : IP주소, localhost, 127.0.0.1
# user : 유저, root
# password : 비밀번호, 1234
# db : 데이터베이스, kdt
db = MySQLdb.connect(host = 'localhost', user = 'root', password = '1234', db = 'kdt')
# db = MySQLdb.connect('localhost', 'root', '1234', 'kdt') # 생략도 가능
2. cursor 생성하기
- 하나의 DataBase Connection에 대하여 독립적으로 SQL문을 실행할 수 있는 작업환경을 제공하는 객체
- 하나의 connection에 동시에 한 개의 cursor만 생성할 수 있으며, cursor를 통해 SQL문을 실행하면 실행결과를 튜플 단위로 반환
cur = db.cursor()
sql = 'select userid, username, hp, email, gender from member'
cur.execute(sql)
# cur.execute('select userid, username, hp, email, gender from member;')
3. SQL문 결과 가져오기
- fetchall() : 한번에 모든 tuple을 가져옴. 검색 결과가 매우 크다면 메모리 오버헤드가 발생할 수 있음
- fetchone() : 한번에 하나의 tuple을 가져옴. 다시 메서드를 호출하면 다음 데이터 하나를 가져옴
row = cur.fetchall() # 모든 튜플 가져오기
print(row)
cur.execute(sql)
row = cur.fetchone() # 하나의 튜플만 가져오기
print(row)
# ('apple', '김사과', '01011111111', 'apple@naver.com', '남자')
# fetchone()을 이용하여 루프를 돌면서 모든 데이터를 출력하기
cur.execute(sql)
while True:
row = cur.fetchone()
if row:
print(row)
else:
break
# cursor에 dictionary 형식으로 row를 유지하도록 내부 타입을 명시
cur = db.cursor(MySQLdb.cursors.DictCursor)
cur.execute(sql)
while True:
row = cur.fetchone()
if row:
print(f"아이디: {row['userid']}, 이름 : {row['username']}, 전화번호 : {row['hp']}, 이메일 : {row['email']}, 성별 : {row['gender']}")
else:
break
4. Cursor와 Connection 닫아주기
cur.close() # 커서 닫기
db.close() # 커넥션 닫기
5. 데이터 삽입하기
db = MySQLdb.connect(host = 'localhost', user = 'root', password = '1234', db = 'kdt')
cur = db.cursor()
sql = "insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2) values ( %s, %s, %s, %s, %s, %s, %s, %s)"
data = ('avocado', '0000', '안가도', '010-1515-1515', 'avocado@avocado.com', '남자', '000000', '000000')
cur.execute(sql, data)
db.commit() # insert, delete, update를 사용할때는 commit()를 해줘야 한다
sql = "insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2) values ( %s, %s, %s, %s, %s, %s, %s, %s)"
data = [('abcd1234', '0000', '이사과', '0100000000', 'abcd1234@apple.com', '여자', '000000', '000000'),('abcd1111', '0000', '박메론', '0100000000', 'abcd1111@melon.com', '여자', '000000', '000000')] # 데이터가 여러개 일때 리스트 안에 튜플 넣기
cur.executemany(sql, data) # 여러개일 때는 executemany() 사용
db.commit()
문제
- '회원가입' 프로그램을 만들어보자
sql = "insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2, zipcode, address, address2, address3) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
while True:
print('************* 회원 가입 *************')
userid = input('아이디를 입력하세요 : ')
userpw = input('비밀번호를 입력하세요 : ')
username = input('이름을 입력하세요 : ')
hp = input('휴대폰 번호를 입력하세요 : ')
email = input('이메일을 입력하세요 : ')
gender = input('성별을 입력하세요 : ')
ssn1 = input('주민번호 앞자리를 입력하세요 :')
ssn2 = input('주민번호 뒷자리를 입력하세요 :')
zipcode = input('우편번호를 입력하세요 : ')
address = input('주소를 입력하세요 :')
address2 = input('상세주소를 입력하세요 :')
address3 = input('참고사항을 입력하세요 : ')
data = (userid, userpw, username, hp, email, gender, ssn1, ssn2, zipcode, address, address2, address3)
try:
cur.execute(sql, data)
db.commit()
print('가입되었습니다!')
break
except:
print('오류가 발생!')
continue
cur.close()
db.close()
6. 데이터 수정하기
db = MySQLdb.connect(host = 'localhost', user = 'root', password = '1234', db = 'kdt')
cur = db.cursor()
sql = "update member set zipcode = '12345', address = '서울시', address2 = '강남구', address3 = '역삼동111' where userid = 'avocado'"
result = cur.execute(sql)
db.commit()
print(result) # 성공했으면 성공한 숫자만큼 리턴, 실패했으면 0
# 출력결과 : 1
sql = "update member set zipcode = '11111', address = '서울시', address2 = '강남구', address3 = '역삼동111' where userid = 'avocado'"
result = cur.execute(sql)
db.commit()
if result > 0:
print("수정되었습니다")
else:
print('에러!')
cur.close()
db.close()
문제
- 로그인 프로그램을 만들어보자
db = MySQLdb.connect(host = 'localhost', user = 'root', password = '1234', db = 'kdt')
cur = db.cursor()
userid = input('아이디를 입력하세요 : ')
userpw = input('비밀번호를 입력하세요 : ')
sql = "select * from member where userid = %s and userpw = %s"
data = (userid, userpw)
result = cur.execute(sql, data)
if result > 0:
print("로그인 성공!")
else:
print('아이디 또는 비밀번호가 틀렸습니다!')
cur.close()
db.close()
7. 데이터 삭제하기
db = MySQLdb.connect(host = 'localhost', user = 'root', password = '1234', db = 'kdt')
cur = db.cursor()
sql = "delete from member where userid = 'avocado'"
result = cur.execute(sql)
db.commit()
if result > 0:
print('탈퇴되었습니다')
else:
print('오류!')
'Python' 카테고리의 다른 글
29. 재귀호출(recursive call) (0) | 2023.04.12 |
---|---|
28. DB를 이용한 단어장 만들기 (0) | 2023.03.22 |
26. DAO, DTO, VO (0) | 2023.03.22 |
25. 파일 입출력 라이브러리 (0) | 2023.03.20 |
주피터 노트북 설치 (0) | 2023.03.14 |