끄적이는 개발노트

260410_강의정리 (Python을 이용한 MySQL DB 연동) 본문

Python

260410_강의정리 (Python을 이용한 MySQL DB 연동)

크런키스틱 2026. 4. 10. 22:06
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 (실무에서 많이 사용 / 컬럼명 접근 가능)
  • 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