Database

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

Chansman 2025. 3. 24. 13:35

 

🚀 PyMySQL을 사용한 더미 데이터 삽입하기

📌 개요

PyMySQL은 Python에서 MySQL 데이터베이스와 상호작용하는 데 사용되는 라이브러리입니다. 이번 포스팅에서는 Faker 라이브러리를 이용해 더미 데이터를 생성하고, 이를 PyMySQL을 통해 Products, Customers, Orders 테이블에 삽입하는 방법을 실습해보겠습니다.

이를 통해 실제 데이터베이스 환경에서 데이터를 삽입하고 관리하는 방법을 이해할 수 있습니다.


🛠️ 필요한 라이브러리

먼저 필요한 라이브러리를 설치하고 준비해야 합니다.

bash
 
pip install pymysql faker
  • pymysql: MySQL 데이터베이스와 Python 간의 연결을 도와주는 라이브러리입니다.
  • faker: 가짜 데이터를 생성해주는 라이브러리로, 테스트 데이터나 샘플 데이터를 생성할 때 유용합니다.

⚙️ 동작 원리

  1. Faker로 더미 데이터 생성
    • Faker 라이브러리를 사용하여 가짜 데이터를 생성합니다.
    • 이 데이터는 Products, Customers, Orders 테이블에 삽입됩니다.
  2. PyMySQL로 데이터베이스 연결
    • pymysql.connect()를 사용하여 MySQL 데이터베이스에 연결하고, SQL 쿼리를 실행합니다.
  3. SQL 쿼리로 데이터 삽입
    • 생성된 데이터를 SQL 쿼리로 삽입합니다. 각 테이블에 맞는 데이터를 삽입하는 과정입니다.

💻 전체 코드 흐름

python
 
import pymysql
from faker import Faker
import random

# Faker 객체 초기화
fake = Faker()

# 데이터베이스 연결 설정
conn = pymysql.connect(
    host='localhost',  # 데이터베이스 서버 주소
    user='root',       # 데이터베이스 사용자 이름
    password='oz-password',  # 데이터베이스 비밀번호
    db='airbnb',       # 데이터베이스 이름
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

# Products 테이블을 위한 더미 데이터 생성
def generate_product_data(n):
    for _ in range(n):
        product_name = fake.word().capitalize() + ' ' + fake.word().capitalize()
        price = round(random.uniform(10, 100), 2)
        stock_quantity = random.randint(10, 100)
        create_date = fake.date_time_this_year()
        yield (product_name, price, stock_quantity, create_date)

# Customers 테이블을 위한 더미 데이터 생성
def generate_customer_data(n):
    for _ in range(n):
        customer_name = fake.name()
        email = fake.email()
        address = fake.address()
        create_date = fake.date_time_this_year()
        yield (customer_name, email, address, create_date)

# Orders 테이블을 위한 더미 데이터 생성
def generate_order_data(n, customer_ids):
    for _ in range(n):
        customer_id = random.choice(customer_ids)
        order_date = fake.date_time_this_year()
        total_amount = round(random.uniform(20, 500), 2)
        yield (customer_id, order_date, total_amount)

# 데이터베이스에 데이터 삽입
with conn.cursor() as cursor:
    # Products 데이터 삽입
    products_sql = "INSERT INTO Products (productName, price, stockQuantity, createDate) VALUES (%s, %s, %s, %s)"
    for data in generate_product_data(10):
        cursor.execute(products_sql, data)
    conn.commit()

    # Customers 데이터 삽입
    customers_sql = "INSERT INTO Customers (customerName, email, address, createDate) VALUES (%s, %s, %s, %s)"
    for data in generate_customer_data(5):
        cursor.execute(customers_sql, data)
    conn.commit()

    # Orders 데이터 삽입
    # Customers 테이블에서 ID 목록을 얻어옵니다.
    cursor.execute("SELECT customerID FROM Customers")
    customer_ids = [row['customerID'] for row in cursor.fetchall()]
    
    orders_sql = "INSERT INTO Orders (customerID, orderDate, totalAmount) VALUES (%s, %s, %s)"
    for data in generate_order_data(15, customer_ids):
        cursor.execute(orders_sql, data)
    conn.commit()

# 데이터베이스 연결 종료
conn.close()

💡 코드 분석

1️⃣ Faker로 더미 데이터 생성

  • generate_product_data(), generate_customer_data(), generate_order_data() 함수에서는 각각 Products, Customers, Orders 테이블에 삽입할 데이터를 생성합니다.
  • Faker를 활용하여 랜덤한 제품 이름, 가격, 고객 이름, 이메일 등을 생성하고, 이 데이터를 SQL 쿼리에 맞게 반환합니다.

2️⃣ 데이터베이스 연결 및 삽입

  • pymysql.connect()로 MySQL 데이터베이스와 연결합니다.
  • cursor.execute()를 사용하여 SQL 쿼리를 실행하고, conn.commit()을 통해 데이터를 데이터베이스에 반영합니다.

3️⃣ Orders 테이블 삽입

  • Orders 테이블에는 고객의 주문 정보가 삽입됩니다.
  • 고객 ID 목록을 Customers 테이블에서 조회하여 랜덤으로 주문을 생성합니다.

🧪 실전 적용 시 유의사항

  1. 테스트 환경에서만 사용
    이 코드는 테스트용 더미 데이터를 생성하는 코드이므로 실제 운영 데이터베이스에는 사용하지 않는 것이 좋습니다.
  2. 데이터베이스 연결 정보 보안
    데이터베이스 연결 정보를 코드에 하드코딩하지 않고, 외부 파일이나 환경변수를 사용하는 것이 보안에 좋습니다.
  3. 데이터의 무결성 유지
    생성된 데이터가 실제 환경에서 사용할 수 있는지 검증하는 과정이 필요합니다. 예를 들어, 가격이 음수거나 이메일 형식이 잘못될 수 있으므로 검증 로직을 추가하는 것이 좋습니다.

마무리

  • PyMySQL과 Faker를 사용하여 MySQL 데이터베이스에 더미 데이터를 삽입하는 방법을 배웠습니다.
  • 이 예제를 통해 테스트용 데이터베이스를 구성하고, 다양한 데이터를 자동으로 생성하여 실습할 수 있었습니다.

🔧 이번 포스팅에서 배운 핵심 포인트

  1. PyMySQL로 MySQL에 연결하고 쿼리를 실행하는 방법
  2. Faker를 사용해 랜덤 데이터를 생성하는 방법
  3. 데이터 삽입 후 commit()으로 변경 사항 반영하는 방법