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

2025. 3. 24. 13:35·Database

 

🚀 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()으로 변경 사항 반영하는 방법

'Database' 카테고리의 다른 글

Chapter 5-30. Mini Project : 예스24 베스트셀러 데이터 수집 후 데이터 분석하기(1/7)  (0) 2025.03.24
Database - Chapter 5-28. PyMySQL 연습(3/3)  (0) 2025.03.24
Database - Chapter 5-28. PyMySQL 연습(1/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 5-30. Mini Project : 예스24 베스트셀러 데이터 수집 후 데이터 분석하기(1/7)
  • Database - Chapter 5-28. PyMySQL 연습(3/3)
  • Database - Chapter 5-28. PyMySQL 연습(1/3)
  • Database - Chapter 4-22. 2) 실습 - mysqlsample data 분석(2/2)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787) N
      • Python (32)
      • 프로젝트 (110) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    gpterror
    life reflection
    bts
    chinanightlife
    college reunions
    americanlaw
    RM
    뷔
    basalcellcarcinoma
    global politics
    trumpmuskclash
    hotcoffeecase
    smartphonedurability
    self-growth
    classaction
    travel ban
    btscomeback
    chatgpterror
    homebartrend
    remittance
    btsdischarge
    urbantrends
    lawsuitculture
    btsjungkook
    americaparty
    titaniumcase
    livebroadcast
    btsreunion
    newpoliticalparty
    youngprofessionals
  • 최근 댓글

  • 최근 글

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

티스토리툴바