Python/개요 및 문법

파이썬과 MySQL 연동

Bambi97 2024. 10. 14. 16:16

1. MySQL Client

 

(1) 설치 명령어

# mysql 연동 라이브러리 설치 명령어
!pip install mysqlclient

 

(2) connection 객체 생성

import MySQLdb

# host='ip주소', user='사용자명', password='비밀번호', db='데이터베이스명'
db = MySQLdb.connect(host='localhost', user='root', password='1234', db='kdt')
print(db)
# <_mysql.connection open to 'localhost' at 000001C6BF9DC590>

 

2. Cursor

하나의 데이터베이스 connection에 대해 독립적으로 SQL문을 실행할 수 있는 작업 환경을 제공하는 객체

 

(1) Tuple로 조회 결과 확인

    1) fetchall() : select 모든 결과를 한 번에 2차원 Tuple로 리턴 (결과가 많으면 오버헤드 발생)

cur = db.cursor()
cur.execute('select userid, name, gender, hp from member') # 조회된 row수 출력

data = cur.fetchall()
print(data)

# (
# ('apple', '김사과', '여자', '010-1111-1111'), ('avocado', '안카도', '남자', '010-5555-5555')
# , ('banana', '반하나', '여자', '010-2222-2222'), ('melon', '이메론', '남자', '010-4444-4444')
# , ('orange', '오렌지', '여자', '010-3333-3333')
# )

 

    2) fetchone() : 한 row를 Tuple로 리턴

cur = db.cursor()
cur.execute('select userid, name, gender, hp from member')

one = cur.fetchone()
print(one)    # ('apple', '김사과', '여자', '010-1111-1111')
one = cur.fetchone()
print(one)    # ('avocado', '안카도', '남자', '010-5555-5555')

  

(2) 딕셔너리로 조회 결과 확인

cur = db.cursor(MySQLdb.cursors.DictCursor)
sql = 'select userid, name, gender, hp from member'
cur.execute(sql)

while True:
    result = cur.fetchone()
    if result:
        items = result.items()
        for i in items:
            print(f'{i[0]}: {i[1]}', end=', ')
        print()
    else:
        break

# 출력 결과
userid: apple, name: 김사과, gender: 여자, hp: 010-1111-1111, 
userid: avocado, name: 안카도, gender: 남자, hp: 010-5555-5555, 
userid: banana, name: 반하나, gender: 여자, hp: 010-2222-2222, 
userid: melon, name: 이메론, gender: 남자, hp: 010-4444-4444, 
userid: orange, name: 오렌지, gender: 여자, hp: 010-3333-3333,

 

(3) cursor와 connection 마무리 작업

cur.close()
db.close()

 

(4) INSERT

 

    1) 단일 row 저장

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='kdt')
cur = db.cursor()

sql = 'insert into member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values(%s, %s, %s, %s, %s, %s, %s, %s)'
data = ('mango', '0000', '마앙고', '010-0000-0000', 'mango@mango.com', '남자', '000000', '1111111')

cur.execute(sql, data)
db.commit()

cur.close()
db.close()

 

    2) 여러 row 저장

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='kdt')
cur = db.cursor()

sql = 'insert into member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values(%s, %s, %s, %s, %s, %s, %s, %s)'
data = [('berry', '9999', '배애리', '010-9999-9999', 'berry@berry.com', '여자', '999999', '9999999'), ('grapes', '8888', '표도르', '010-8888-8888', 'grapes@grapes.com', '남자', '888888', '8888888')]

cur.executemany(sql, data)
db.commit()

cur.close()
db.close()

 

(5) UPDATE

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='kdt')
cur = db.cursor()

sql = 'update member set zipcode=%s, address1=%s, address2=%s, address3=%s where userid=%s'
data = ('12345', '서울', '서초구', '서초동', 'banana')
result = cur.execute(sql, data)
db.commit()

if result > 0:
    print('수정되었습니다.')
else:
    print('에러!')
    
cur.close()
db.close()

 

(6) DELETE

db = MySQLdb.connect(host='localhost', user='root', password='1234', db='kdt')
cur = db.cursor()

sql = 'delete from member where userid = %s'
result = cur.execute(sql, ('berry',))
db.commit()

if result > 0:
    print('삭제되었습니다.')
else:
    print('에러!')
    
cur.close()
db.close()

'Python > 개요 및 문법' 카테고리의 다른 글

개요  (1) 2024.10.15
SQL 연동 단어장 예제  (1) 2024.10.14
디렉토리 관리 프로그래밍  (1) 2024.10.07
파일 입출력 모드  (4) 2024.10.02
변수 타입 어노테이션  (1) 2024.10.02