Database - Chapter 5-28. PyMySQL 연습(1/3)

2025. 3. 24. 13:31·Database

📌 개념 정리

PyMySQL은 Python에서 MySQL 데이터베이스와 상호작용할 수 있게 해주는 라이브러리입니다. MySQL 데이터베이스에 연결하여 SQL 쿼리를 실행하고 데이터를 조회하거나 수정할 수 있습니다. 이를 통해 Python 애플리케이션에서 데이터베이스 관리 작업을 자동화하거나 효율적으로 처리할 수 있습니다.

에어비앤비의 데이터베이스를 예로 들어 3개의 테이블(Products, Customers, Orders)을 생성하고, PyMySQL을 사용하여 다양한 작업을 수행하는 방법을 알아보겠습니다. 이 예제에서는 제품 추가, 고객 조회, 재고 업데이트, 주문 처리 등 여러 가지 실전 문제를 해결할 것입니다.


🚦 동작 원리 및 구조

  1. MySQL 데이터베이스와의 연결
    PyMySQL을 사용하기 위해서는 먼저 데이터베이스에 연결해야 합니다. pymysql.connect() 메서드를 사용하여 MySQL 서버에 접속하고, cursor() 메서드를 통해 SQL 쿼리를 실행할 수 있습니다.
  2. SQL 쿼리 실행
    PyMySQL에서는 SQL 쿼리를 실행하기 위해 execute() 메서드를 사용합니다. 데이터를 조회할 때는 fetchall()을 사용하여 결과를 받아올 수 있습니다. 데이터 삽입, 업데이트, 삭제 작업도 SQL 쿼리를 통해 처리합니다.
  3. 트랜잭션 관리
    데이터베이스의 변경 작업은 트랜잭션을 관리하며, 작업이 완료되면 commit()을 호출하여 반영합니다. 만약 에러가 발생하면 rollback()을 호출하여 변경 사항을 취소할 수 있습니다.

💻 코드 예시 및 흐름 분석

  • 1. 새로운 제품 추가:
    'Products' 테이블에 새로운 제품을 추가하는 코드입니다
import pymysql

# 데이터베이스 연결
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='password',
                             database='airbnb')

try:
    with connection.cursor() as cursor:
        # 새로운 제품 추가
        sql = "INSERT INTO Products (productName, price, stockQuantity, createDate) VALUES (%s, %s, %s, NOW())"
        cursor.execute(sql, ('Python Book', 29.99, 100))
        connection.commit()
        print("새로운 제품이 추가되었습니다.")
finally:
    connection.close()
  •  흐름 설명:
    • pymysql.connect()로 MySQL 서버와 연결합니다.
    • cursor.execute()로 SQL 쿼리를 실행하여 'Products' 테이블에 데이터를 삽입합니다.
    • connection.commit()을 호출하여 데이터베이스에 변경 사항을 반영합니다.

2. 고객 목록 조회:
'Customers' 테이블에서 모든 고객 정보를 조회하는 코드입니다.

import pymysql

# 데이터베이스 연결
connection = pymysql.connect(host='localhost',
                             user='root',
                             password='password',
                             database='airbnb')

try:
    with connection.cursor() as cursor:
        # 모든 고객 정보 조회
        sql = "SELECT * FROM Customers"
        cursor.execute(sql)
        result = cursor.fetchall()
        for row in result:
            print(row)
finally:
    connection.close()

 

흐름 설명: 

  • cursor.execute()로 SELECT 쿼리를 실행하여 모든 고객 정보를 조회합니다.
  • fetchall()로 결과를 받아오고, 결과를 출력합니다.

🧪 실전 사례

다음은 실전에서 자주 발생할 수 있는 문제들을 해결하는 예제입니다:

 

1. 제품 재고 업데이트:
주문이 들어오면 해당 제품의 재고를 감소시켜야 합니다. Orders 테이블의 주문 정보를 기반으로 'Products' 테이블의 재고를 업데이트하는 코드입니다.

import pymysql

def update_stock(order_id):
    connection = pymysql.connect(host='localhost',
                                  user='root',
                                  password='password',
                                  database='airbnb')

    try:
        with connection.cursor() as cursor:
            # 주문 정보 조회
            sql = "SELECT productID, quantity FROM Orders WHERE orderID = %s"
            cursor.execute(sql, (order_id,))
            order = cursor.fetchone()

            # 제품의 재고 업데이트
            sql_update = "UPDATE Products SET stockQuantity = stockQuantity - %s WHERE productID = %s"
            cursor.execute(sql_update, (order['quantity'], order['productID']))
            connection.commit()
            print(f"주문 ID {order_id}에 대한 재고가 업데이트되었습니다.")
    finally:
        connection.close()

 

흐름 설명:

주문 ID를 사용하여 Orders 테이블에서 제품 정보와 주문 수량을 조회합니다.

해당 제품의 재고를 감소시키는 SQL 쿼리를 실행합니다.

 

2.고객별 총 주문 금액 계산:
각 고객별로 총 주문 금액을 계산하는 코드입니다.

import pymysql

# 고객별 총 주문 금액 계산
def calculate_total_amount():
    connection = pymysql.connect(host='localhost',
                                  user='root',
                                  password='password',
                                  database='airbnb')

    try:
        with connection.cursor() as cursor:
            # 고객별 총 주문 금액 조회
            sql = """
            SELECT c.customerName, SUM(o.totalAmount) AS totalSpent
            FROM Orders o
            JOIN Customers c ON o.customerID = c.customerID
            GROUP BY c.customerName
            """
            cursor.execute(sql)
            result = cursor.fetchall()
            for row in result:
                print(f"Customer: {row['customerName']}, Total Spent: {row['totalSpent']}")
    finally:
        connection.close()

흐름 설명:

Orders 테이블과 Customers 테이블을 조인하여 고객별로 총 주문 금액을 계산합니다.

GROUP BY 구문을 사용하여 각 고객의 총 금액을 구합니다.

 

🧠 고급 팁 or 자주 하는 실수

트랜잭션 관리
PyMySQL을 사용할 때 여러 SQL 쿼리를 한 번에 실행하는 경우, 트랜잭션을 명확히 관리해야 합니다. 작업 중 오류가 발생하면 rollback()을 사용해 이전 상태로 되돌리는 것이 중요합니다.

커서(Cursor) 관리
cursor()를 사용할 때, SQL 쿼리 실행 후 커서를 반드시 닫아야 합니다. 이는 데이터베이스 자원을 절약하고, 잠금을 방지하는 데 중요합니다. with 구문을 사용하면 자동으로 커서를 닫을 수 있습니다.


✅ 마무리 요약 및 복습 포인트

PyMySQL을 사용하여 MySQL 데이터베이스와 연결하고, SQL 쿼리를 실행하여 데이터를 삽입, 조회, 업데이트, 삭제할 수 있습니다.

각 실전 문제를 해결하기 위한 Python 스크립트 예제를 제공했으며, 데이터베이스 테이블 구조와 쿼리 작성을 이해할 수 있었습니다.

PyMySQL을 활용하여 더 복잡한 데이터베이스 작업을 수행할 수 있으며, 트랜잭션 관리와 커서 관리 등의 고급 기능을 활용하는 것이 중요합니다.

'Database' 카테고리의 다른 글

Database - Chapter 5-28. PyMySQL 연습(3/3)  (0) 2025.03.24
Database - Chapter 5-28. PyMySQL 연습(2/3)  (0) 2025.03.24
Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(2/2)  (0) 2025.03.21
Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(1/2)  (0) 2025.03.21
Database - Chapter 3-21 실습 -간단한 스키마 설계하기  (0) 2025.03.20
'Database' 카테고리의 다른 글
  • Database - Chapter 5-28. PyMySQL 연습(3/3)
  • Database - Chapter 5-28. PyMySQL 연습(2/3)
  • Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(2/2)
  • Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(1/2)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (567)
      • Python (31)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (10)
      • 특강 (26)
      • 기술블로그 (187)
      • AI 분석 (3)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Database - Chapter 5-28. PyMySQL 연습(1/3)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.