728x90
목차
1. 파이썬의 mysqlclient
- mysqlclient
- Cursor생성하기
- SQL문 결과 가져오기
- Cursor와 Connection 닫기
- 데이터 삽입하기
- 데이터 수정하기
- 데이터 삭제하기
- 문제) 회원가입 프로그램 작성
- 문제) 로그인 프로그램 작성
27.파이썬과 MySQL연동
1. 파이썬의 mysqlclient
1-1.mysqlclient
- 파이썬이랑 mysql은 전혀 다른 녀석 둘사이를 해석해주는 매개체가 존재한다면 소통이 가능하다!
- PyMySQL이라는 라이브러리가 존재 하지만 우리는 mysqlclient를 사용할것이다.
- PyMySQL은 순수 파이썬으로 만들어진 녀석 속도는 mysqlclient가 빠르다.
- 파이썬에서는 MySQL 서버와 통신할 수 있는 파이썬용 데이터베이스 커넥터의 종류가 여러가지 존재한다.
- PyMySQL, mysqlclient 두가지 가장 많이 사용한다.
- 사용법은 비슷하나 파이썬에서는 속도가 빠른 mysqlclient를 권장 하고 있음
mysqlclient 설치 와 import 후 connect 까지
사용법 -
MySQLdb.connect(host=' ip주소 또는 localhost', user='로그인ID', password='패쓰워드', db ='데이터베이스명' )
# 순서만 맞춰준다면 생략가능 대신 순서가 바꿔면 안된다 !
#mysqlclient 설치
!pip install mysqlclient
# import를 이용하여 잘 설치 되었는지 확인
import MySQLdb
# 커넥트 시도
db = MySQLdb.connect(host=' ip주소 또는 localhost', user='로그인ID', password='패쓰워드', db ='데이터베이스명' )
1-2.Cursor생성하기
- 하나의 데이터베이스 connection에 대하여 독립적으로 SQL문을 실행할 수 있는 작업 환경을 제공하는 객체
- 하나의 connection에 동시에 한 개의 cursor만 생성할 수 있으며, cursor를 통해 SQL문을 실행하면 실행결과를 튜플 단위로 반환 해준다.
- 위에서 연결 시킨 db변수를 이용하여 만든다
# cur변수에 cursor을 생성해주고 sql변수에 SQL문을 넣어준다.
cur = db.cursor()
sql = 'select userid, username, hp, email, gender from member'
cur.execute(sql) # 결과값 6을 반환 해준다. 이해를 쉽게 튜플 6개를 가져왔다 ~~
1-3.SQL문 결과 가져오기
- 메소드 알아보기
- fetchall() : 한번에 모든 튜플을 가져옴 -> 특징 -검색 결과가 매우 크다면 메모리 오버헤드가 발생할 수 있음
- fetchone() : 한번에 하나의 튜플만 가져옴 -> 특징 - 다시 메소드를 호출하면 다음 데이터 하나를 가져옴
# 한번 실행후 다시 실행하면 커서가 오렌지 다음을 가르키고 있어서 값이 없음.
# 전체 튜플 다 가져오기 !
row = cur.fetchall()
print(row)
# 위에서 한번 출력 했기때문에 cur. execute(sql)을 사용 하지 않을경우 값이 없음
cur.execute(sql)
#한번에 하나의 튜플 가져오기
row = cur.fetchone()
print(row)
# fetchone()을 이용하여 루프를 돌면서 모든 데이터를 한줄씩 출력하기
cur.execute(sql)
while True:
row = cur.fetchone()
if row:
print(row)
else:
break
1-4.Cursor와 Connection 닫기
- Cursor와 Connection 을 닫아주는 이유
- 자원 해제: Cursor와 Connection은 자원(resource)을 사용하므로, 이를 해제하지 않으면 메모리나 다른 자원이 부족해질 수 있습니다. 따라서, 이를 닫아주는 것은 자원을 효율적으로 관리하는 데에 중요합니다.
- 보안: Cursor와 Connection을 닫아주지 않으면, 해당 연결이 계속 유지되어 있어 악의적인 공격에 취약해질 수 있습니다. 따라서, 이를 닫아주는 것은 시스템 보안에도 중요합니다.
- 트랜잭션 관리: MySQL에서는 트랜잭션(Transaction)을 사용하여 데이터 일관성을 유지합니다. Cursor와 Connection을 닫아주지 않으면, 해당 트랜잭션이 계속 유지되어 있을 수 있으므로, 이를 닫아주는 것은 트랜잭션 관리에도 중요합니다.
- 성능: Cursor와 Connection을 닫아주지 않으면, 해당 연결이 계속 유지되어 있어 성능이 저하될 수 있습니다. 따라서, 이를 닫아주는 것은 시스템 성능 향상에도 중요합니다.
cur.close() #Cursor 닫기
db.close() #Connection 닫기
1-5.데이터 삽입하기
# values값을 문자열로 넣기 위해서 %s처리 한다.
#%s에 값을 넣어주기 위해서 data변수에 값을 저장해준다.
sql = "insert into member (userid, userpw, username, hp, email, gender, ssn1, ssn2) values ( %s, %s, %s, %s, %s, %s, %s, %s)"
data = ('avocado2', '0000', '아보카', '010-1211-1551', 'apple@apple.com', '남자', '001011', '1111111')
# sql쿼리에 data값을 넣어 준다 쉼표기준으로 오른쪽을 왼쪽에 넣어준다.
cur.execute(sql, data)
# commit을 해줘야 값이 즉시반영이 된다.
db.commit()
1-6. 데이터 수정하기
sql = "update member set zipcode='1234', address1='서울시',address2='강남구',address3='역삼동' where userid = 'avocado2'"
result = cur.execute(sql)
db.commit()
if result > 0:
print('수정되었습니다. ')
else:
print('에러!')
1-7.데이터 삭제하기
import MySQLdb
db = MySQLdb.connect(host="localhost", user="root", passwd="1234", db="kdt")
cur = db.cursor()
sql = "delete from member where userid = 'avocado2'"
result = cur.execute(sql)
db.commit()
if result > 0 :
print('탈퇴 되었습니다. ')
else:
print('오류발생')
#cur.close() #커서 닫기
#db.close() #커넥션 닫기
1-8.문제) 회원가입 프로그램 작성
- ************ 회원가입 ************
- 아이디를 입력하세요. (중복되면 다시 입력 받기)
- 비밀번호를 입력하세요
- 이름을 입력 하세요
- 휴대폰 번호를 입력하세요.
- 이메일을 입력하세요.
- 성별을 입력하세요.
- 주민번호 앞자리를 입력하세요.
- 주민번호 뒷자리를 입력하세요.
- 우편번호를 입력하세요
- 주소를 입력하세요
- 상세주소를 입력하세요 .
- 참고 사항을 입력하세요.
가입 되었습니다. 오류처리 ->> 다시 입력하도록
import MySQLdb
db = MySQLdb.connect('localhost','root', '1234', 'kdt')
cur = db.cursor()
while True:
try:
userid = input('ID을 입력하세요. ')
userpw = input('PW를 입력하세요. ')
username = input('이름을 입력하세요. ')
hp = input('HP 을 입력하세요. ')
email = input('Email을 입력하세요. ')
gender = input('성별을 입력하세요. ')
ssn1 = input('주민 앞자리을 입력하세요. ')
ssn2 = input('주민 뒷자리을 입력하세요. ')
zipcode = input('우편번호을 입력하세요. ')
address1 = input('주소1을 입력하세요. ')
address2 = input('상세주소을 입력하세요. ')
address3 = input('참고사항을 입력하세요. ')
sql = "insert into member (userid, userpw, username, 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, username, hp, email, gender, ssn1, ssn2, zipcode, address1, address2, address3)
cur.execute(sql, data)
db.commit()
print('가입 되었습니다. ')
break
except:
print('다시입력하세요')
cur.close() #커서 닫기
db.close() #커넥션 닫기
1-9.문제) 로그인 프로그램 작성
- 로그인 프로그램을 작성해보자.
- ********** 로그인 **********
- 아이디를 입력하세요 : apple
- 비밀번호를 입력하세요 : 1234
- 로그인 되었습니다.
- 아이디를 입력하세요 : apple
- 비밀번호를 입력하세요 : 0000
- 아이디 또는 비밀번호가 틀렸어요.
import MySQLdb
db = MySQLdb.connect(host="localhost", user="root", passwd="1234", db="kdt")
cur = db.cursor()
userid = input('ID을 입력하세요. ')
userpw = input('PW를 입력하세요. ')
sql = 'select userid 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() #커넥션 닫기
728x90
'개발 > 파이썬' 카테고리의 다른 글
2023.04.12 파이썬의 재귀호출 (0) | 2023.04.12 |
---|---|
23.03.21파이썬 DAO,DTO,VO (0) | 2023.03.21 |
23.03.14파이썬의 폴더 관리 프로그램 (0) | 2023.03.15 |
23.03.14파이썬의 파일 입출력 라이브러리 (0) | 2023.03.15 |
23.03.13파이썬의 변수타입 어노테이션 (1) | 2023.03.13 |
댓글