728x90
반응형
SMALL
1. mysqlclient
- 파이썬에서는 MySQL 서버와 통신할 수 있는 파이썬용 데이터베이스 커넥터의 종류가 여러가지 있음
- PyMySQL, mysqlclient를 가장 많이 사용함
- 사용법은 비슷하나 속도가 빠른 mysqlclient를 권장하고 있음
!pip install mysqlclient
Requirement already satisfied: mysqlclient in c:\users\administrator\appdata\local\programs\python\python38\lib\site-packages (2.1.1)
WARNING: You are using pip version 20.2.1; however, version 23.0.1 is available.
You should consider upgrading via the 'c:\users\administrator\appdata\local\programs\python\python38\python.exe -m pip install --upgrade pip' command.
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')
9
3. SQL문 결과 가져오기
- fetchall(): 한번에 모든 tuple을 가져옴. 검색 결과가 매우 크다면 메모리 오버헤드가 발생할 수 있음
- fetchone(): 한번에 하나의 tuple을 가져옴. 다시 메서드를 호출하면 다음 데이터 하나를 가져옴
row = cur.fetchall()
print(row)
(('apple', '김사과', '010-1111-1111', 'apple@apple.com', '여자'), ('avocado', '안카도', '010-0000-0000', 'avocado@avocado.com', '남자'), ('banana', '반하나', '010-2222-2222', 'banana@naver.com', '여자'), ('berry', '배애리', '010-9999-9999', 'berry@berry.com', '여자'), ('grapes', '표도르', '010-5555-5555', 'grapes@grapes.com', '남자'), ('mango', '마앙고', '010-0000-0000', 'mango@mango.com', '남자'), ('melon', '이메론', '010-4444-4444', 'melon@melon.com', '남자'), ('orange', '오렌지', '010-3333-3333', 'orange@orange.com', '남자'), ('peach', '피이치', '010-0000-0000', 'peach@avocado.com', '여자'))
cur.execute(sql)
row = cur.fetchone()
print(row)
('apple', '김사과', '010-1111-1111', 'apple@apple.com', '여자')
# fetchone()을 이용하여 루프를 돌면서 모든 데이터를 출력하기
cur.execute(sql)
while True:
row = cur.fetchone()
if row:
print(row)
else:
break
('apple', '김사과', '010-1111-1111', 'apple@apple.com', '여자')
('avocado', '안카도', '010-0000-0000', 'avocado@avocado.com', '남자')
('banana', '반하나', '010-2222-2222', 'banana@naver.com', '여자')
('berry', '배애리', '010-9999-9999', 'berry@berry.com', '여자')
('grapes', '표도르', '010-5555-5555', 'grapes@grapes.com', '남자')
('mango', '마앙고', '010-0000-0000', 'mango@mango.com', '남자')
('melon', '이메론', '010-4444-4444', 'melon@melon.com', '남자')
('orange', '오렌지', '010-3333-3333', 'orange@orange.com', '남자')
('peach', '피이치', '010-0000-0000', 'peach@avocado.com', '여자')
# cursor에 dictionary 형식으로 row를 유지하도록 내부 타입을 명시
cur = db.cursor(MySQLdb.cursors.DictCursor)
cur.execute(sql)
while True:
row = cur.fetchone()
if row:
# print(row) # 딕셔너리
print(f"아이디: {row['userid']}, 이름: {row['username']}, 전화번호: {row['hp']}, 이메일: {row['email']}, 성별: {row['gender']}")
else:
break
아이디: apple, 이름: 김사과, 전화번호: 010-1111-1111, 이메일: apple@apple.com, 성별: 여자
아이디: avocado, 이름: 안카도, 전화번호: 010-0000-0000, 이메일: avocado@avocado.com, 성별: 남자
아이디: banana, 이름: 반하나, 전화번호: 010-2222-2222, 이메일: banana@naver.com, 성별: 여자
아이디: berry, 이름: 배애리, 전화번호: 010-9999-9999, 이메일: berry@berry.com, 성별: 여자
아이디: grapes, 이름: 표도르, 전화번호: 010-5555-5555, 이메일: grapes@grapes.com, 성별: 남자
아이디: mango, 이름: 마앙고, 전화번호: 010-0000-0000, 이메일: mango@mango.com, 성별: 남자
아이디: melon, 이름: 이메론, 전화번호: 010-4444-4444, 이메일: melon@melon.com, 성별: 남자
아이디: orange, 이름: 오렌지, 전화번호: 010-3333-3333, 이메일: orange@orange.com, 성별: 남자
아이디: peach, 이름: 피이치, 전화번호: 010-0000-0000, 이메일: peach@avocado.com, 성별: 여자
4. Cursor와 Connection 닫아주기
cur.close() # 커서 닫기
db.close() # 커넥션 닫기
5. 데이터 삽입하기
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@avocado.com', '남자', '000000', '0000000')
cur.execute(sql, data)
db.commit()
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@mango.com', '남자', '000000', '0000000'), ('peach', '0000', '피이치', '010-0000-0000', 'peach@avocado.com', '여자', '000000', '0000000')]
cur.executemany(sql, data)
db.commit()
문제
- '회원가입' 프로그램을 만들어보자
import MySQLdb
db = MySQLdb.connect('localhost', 'root', '1234', 'kdt')
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()
6. 데이터 수정하기
db = MySQLdb.connect('localhost', 'root', '1234', 'kdt')
cur = db.cursor()
sql = "update member set zipcode='11122', address1='서울시', address2='강남구', address3='역삼동' where userid='avocado'"
result = cur.execute(sql)
db.commit()
print(result)
1
sql = "update member set zipcode='22222', address1='서울시', address2='강남구', address3='역삼동' where userid='avocado'"
result = cur.execute(sql)
db.commit()
if result > 0:
print('수정되었습니다')
else:
print('에러!')
에러!
문제
- 로그인 프로그램을 작성해보자
import MySQLdb
아이디를 입력하세요: apple
비밀번호를 입력하세요: 1111
로그인 되었습니다
728x90
반응형
LIST
'파이썬' 카테고리의 다른 글
| DAO,DTO,VO (0) | 2023.03.22 |
|---|---|
| 폴더 관리(이동, 복사, 정렬) (0) | 2023.03.14 |
| 파일 입출력 라이브러리 (0) | 2023.03.14 |
| 데코레이터(Decorator) - 함수 꾸며주기 (0) | 2023.03.13 |
| 클로저(Closure) (0) | 2023.03.13 |