-
(27)Python_파이썬과 MySQL연동Python 2023. 3. 22. 16:36728x90
시작하기에 앞서 MySQL의 간단한 공부를 하고 오시면 좋습니다.
MySQL 시작 : https://jm-rograming.tistory.com/27
(1)MySQL_DBMS
DataBase (데이터베이스) Data: 자료 DataBase: 자료를 통합하여 관리하는 집합체, 저장소 DBMS(Database Management System, 데이터베이스 관리 시스템) 데이터베이스를 관리해주는 소프트웨어 DBMS를 사용하는
jm-rograming.tistory.com
1. mysqlclient
- 파이썬에서는 MySQL 서버와 통신할 수 있는 파이썬용 데이터베이스 커넥터에 종류가 여러가지 있음
- PyMySQL, mysqlclient를 가장 많이 사용함
- 사용법은 비슷하나 속도가 빠른 mysqlclient를 권장하고 있음
- import를 위해 해준다. (!pip install mysqlclient)
# host: IP주소, localhosh, 127.0.0.1
# user: 유저, root
# password: 비밀번호, 1234
# DB: 데이터베이스, test# db = MySQLdb.connect(localhost','root','1234','test')
import MySQLdb
db = MySQLdb.connect(host = 'localhost', user = 'root', password = '1234', db = 'test')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'')결과: 테이블의 raw의 수가 6개가 있기때문에 결과는 6이 나온다.
3. SQL문 결과 가져오기
- fetchall(): 한번에 모든 tuple(행)을 가져옴. 검색 결과가 매우 크다면 메모리 오버헤드가 발생할 수 있음
- fetchone(): 한번에 하나의 tuple을 가져옴. 다시 메서드를 호출하면 다음 데이터 하나를 가져옴
row = cur.fetchall()
print(row)cur.execute(sql)
row = cur.fetchone()
print(row)# 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:
break4. Cursor와 Connection 닫아주기
cur.close() # 커서 닫기
db.close() # 커넥션 닫기5. 데이터 삽입하기
- 단일 튜플을 삽입할 때에는 execute()를 사용
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-0000-0000','avocado@email','남자','000000','0000000')
cur.execute(sql, data) # sql을 실행하면서 값을 data를 넣어준다 %s에
db.commit()- 다중 튜플을 삽입할 때에는 executemany()를 사용한다.
sql = "insert into member(userid,userpw,username,hp,email,gender,ssn1,ssn2) values(%s,%s,%s,%s,%s,%s,%s,%s)"
data = [('mango','0000','마앙고','010-0000-0000','mango@email','남자','000000','0000000'),
('peach','0000','피이치','010-0000-0000','peach@email','여자','000000','0000000')]
cur.executemany(sql, data)
db.commit()문제
- '회원가입'프로그램을 만들어보자
- 회원가입
- 아이디를 입력하세요:
- 비밀번호를 입력하세요:
- 이름을 입력하세요:
- 휴대폰번호를 입력하세요:
- 이메일을 입력하세요:
- 성별을 입력하세요
- 주민번호 앞자리를 입력하세요:
- 주민번호 뒷자리를 입력하세요:
- 우편번호를 입력하세요:
- 주소를 입력하세요:
- 상세주소를 입력하세요:
- 참고사항을 입력하세요:
import MySQLdb
db = MySQLdb.connect('localhost','root','1234','test')
cur = db.cursor()
while True:
try:
userid = input('아이디를 입력하세요: ')
userpw = input('비밀번호를 입력하세요: ')
username = input('이름을 입력하세요: ')
hp = input('휴대폰번호를 입력하세요: ')
email = input('이메일을 입력하세요: ')
gender = input('성별을 입력하세요: ')
ssn1 = input('주민번호 앞자리를 입력하세요: ')
ssn2 = input('주민번호 뒷자리를 입력하세요: ')
zipcode = input('우편번호를 입력하세요: ')
address1 = input('주소를 입력하세요: ')
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()- DB 테이블에도 확인을 해보면 잘 들어간 것을 확인할 수 있을 것이다.
6. 데이터 수정하기
import MySQLdb
db = MySQLdb.connect('localhost','root','1234','test')
cur = db.cursor()sql = "update member set zipcode = '11132', address1 = '서울시', address2 = '강남구', address3 = '역삼동' where userid = 'avocado'"
result = cur.execute(sql)
db.commit()
print(result) # 결과 1(update를 성공했기 때문에 update할 것이 없으면 0)- result값이 1이면 수정이 된 것이고 0이면 안됐기때문에 이런 프로그래밍도 할 수 있다.
sql = "update member set zipcode = '22222', address1 = '서울시', address2 = '강남구', address3 = '역삼동' where userid = 'avocado'"
result = cur.execute(sql)
db.commit()
if result > 0:
print('수정되었습니다.')
else:
print('에러!')문제
- 로그인 프로그램을 작성해보자
- 아이디를 입력하세요: apple
- 비밀번호를 입력하세요: 1111
- 아이디를 입력하세요: apple
- 비밀번호를 입력하세요: 1234
- 아이디 또는 비밀번호가 틀렸습니다.
import MySQLdb
db = MySQLdb.connect('localhost','root','1234','test')
cur = db.cursor()
userid = input('아이디를 입력하세요: ')
userpw = input('비밀번호를 입력하세요: ')
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()- DB테이블의 userid 값과 userpw값을 비교후 참이면 로그인이 되고 참이 아닐경우 틀렸습니다를 출력
7. 데이터 삭제하기
- 삭제를 성공하면 result값이 0보다 큼으로 탈퇴되었습니다를 출력
- 삭제를 실패하거나 할 요소가 없을 경우 오류를 출력
db = MySQLdb.connect('localhost','root','1234','test')
cur = db.cursor()
sql = "delete from member where userid = 'avocado'"
result = cur.execute(sql)
db.commit()
if result > 0:
print('탈퇴되었습니다.')
else:
print('오류!!')'Python' 카테고리의 다른 글
(29)Python_카페 주문 관리 프로그램 (0) 2023.03.27 (28)Python_DB를 이용한 단어장 만들기 (2) 2023.03.23 (26)Python_DAO, DTO, VO (0) 2023.03.21 (25)Python_폴더 관리 프로그램 실습 (0) 2023.03.14 (24)Python_파일 입출력 라이브러리 (0) 2023.03.14