끄적이는 개발노트
260410_강의정리 (Python을 이용한 MySQL DB 연동) 본문
728x90
■ 중요한 메소드 정리
- 기본적으로 pymysql 설치 필요
!pip install pymysql
- connect
- DB에 접속하는 함수
- 주요 파라미터
- host : DB 서버주소
- port: 포트 (MySQL 기본은 3306)
- user : DB 사용자 계정
- password : 비밀번호
- db : 사용할 데이터베이스 이름
- charset : 문자 인코딩 (보통 utf8 또는 utf8mb4)
- autocommit : 트랜잭션의 자동 커밋 여부 (기본은 False)
- cursorclass=pymysql.cursors.DictCursor : 결과를 dictionary 형태로 받음
- cursor
- DB에 SQL을 실행하고 결과를 가져오는 함수
- 실제로 실행하는 도구 역할
- rowcount : 실행 후 영향받은 행(row)의 개수
- 전송하는 데이터의 형태
- tuple과 dict 둘 다 사용 가능
sql = "INSERT INTO review(content_title, rating) VALUES (%s, %s)"
cursor.execute(sql, ("영화1", 5))
-
- cursor 설정에 따른 리턴 데이터 타입
- 기본 cursor : tuple (빠름 / 인덱스 접)
- DictCursor : dict (실무에서 많이 사용 / 컬럼명 접근 가능)
- cursor 설정에 따른 리턴 데이터 타입
- execute
- SQL 문장을 DB에 전달해서 실행하는 함수
- 기본 구조 : cursor.execute(sql, params)
- 결과 반환 준비
- cursor에 결과 저장 (SELECT는 값이 바로 오는게 아니라 recordset 형태로 저장)
- 결과를 꺼내 쓰기 위해서는 fetch 사용
- fetchone : 1개 row 반환 / 다음 호출 시 다음 row 반환
- fetchmany(n) : n개 만큼 row 반환
- fetchall : 모든 row 반환 / 리스트 형태
# SELECT를 활용한 예제 코드
import pymysql
# 1. DB 연결 (autocommit 포함)
conn = pymysql.connect(
host='localhost',
user='root',
password='1234',
db='test',
charset='utf8',
autocommit=False,
cursorclass=pymysql.cursors.DictCursor # dict 형태 반환
)
try:
# 2. cursor 생성
cursor = conn.cursor()
# 3. SELECT 실행
sql = "SELECT * FROM review"
cursor.execute(sql)
# 4. 결과 가져오기 (fetchall)
rows = cursor.fetchall()
print("조회 결과:")
for row in rows:
print(row) # dict 형태
print("조회된 행 개수:", cursor.rowcount)
finally:
# 5. 종료
cursor.close()
conn.close()
# INSERT를 활용한 예제 코드
import pymysql
conn = pymysql.connect(
host='localhost',
user='root',
password='1234',
db='test',
charset='utf8',
autocommit=False
)
try:
cursor = conn.cursor()
sql = """
INSERT INTO review(content_title, user_name, rating)
VALUES (%s, %s, %s)
"""
result = cursor.execute(sql, ("영화1", "홍길동", 5))
print("영향받은 행:", cursor.rowcount)
conn.commit()
except Exception as e:
conn.rollback()
print("에러:", e)
finally:
cursor.close()
conn.close()
- with 방식
- 자동 자원 해제 : cursor.close() 자동 실행
- 실수 방지 => 메모리 누수 방지
- 코드 간결성
- 단, DB 반영을 위해서 commit은 여전히 필요
# 기존 방식
cursor = conn.cursor()
cursor.execute("SELECT * FROM review")
rows = cursor.fetchall()
cursor.close()
# with 방식
with conn.cursor() as cursor:
cursor.execute("SELECT * FROM review")
rows = cursor.fetchall()
728x90
'Python' 카테고리의 다른 글
| 260513_강의 정리 (Matplotlib) (0) | 2026.05.13 |
|---|---|
| 260415_강의 정리 (Flask) (1) | 2026.04.15 |
| 260406_강의정리 (클래스 관계) (0) | 2026.04.06 |
| 260402_강의정리 (상속) (0) | 2026.04.02 |
| 260401_강의정리 (벡터) (0) | 2026.04.01 |
