TIL

👀Today I Learn

pymysql 설치하기

  • Python에서 MySQL 데이터베이스와 상호 작용할 수 있도록 도와주는 라이브러리
  • MySQL 서버와 연결하고, 데이터를 삽입/조회/수정/삭제하는 기능을 제공

      pip install pymysql
    

MySQL에 연결하기

import pymysql

# MySQL 연결
conn = pymysql.connect(
    host='localhost',    # MySQL 서버 주소
    user='root',         # MySQL 사용자 이름
    password='1234',     # MySQL 비밀번호
    db='testdb',         # 사용할 데이터베이스
    charset='utf8mb4',   # 한글 지원
    autocommit=True      # 자동 커밋 설정
)


print("MySQL 연결 성공!")
conn.close()

기능 살펴보기

기능 SQL 문 pymysql 코드
데이터베이스 생성 CREATE DATABASE db_name; cursor.execute("CREATE DATABASE db_name")
테이블 생성 CREATE TABLE table_name (...); cursor.execute("CREATE TABLE ...")
데이터 삽입 INSERT INTO table VALUES (...); cursor.execute("INSERT INTO ...")
여러 개 데이터 삽입 INSERT INTO table VALUES (...), (...); cursor.executemany("INSERT INTO ...")
데이터 조회 SELECT * FROM table; cursor.fetchall()
데이터 수정 UPDATE table SET col=value WHERE ...; cursor.execute("UPDATE ...")
데이터 삭제 DELETE FROM table WHERE ...; cursor.execute("DELETE ...")
  • 이렇게 사용하면 됨!

      try:
          with conn.cursor() as cursor:
              sql = "여기에다가 위의 코드를 넣어서 사용하면 됨"
              cursor.execute(sql)
    
      finally:
          conn.close()
    

⚠️주의할 점!

  1. MySQL 서버가 실행 중인지 확인
    • MySQL 서비스 시작 후 실행해야 합니다.
    • 윈도우: net start mysql
    • 리눅스/맥: sudo systemctl start mysql
  2. SQL 인젝션 방지를 위해 execute()에 직접 변수를 넣지 말 것

     cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", (name, age))
    
  • ❌ 이렇게 하면 안됨:

      cursor.execute(f"INSERT INTO users (name, age) VALUES ('{name}', {age})")  # SQL Injection 위험
    
  1. 자동 커밋(autocommit=True)을 사용하지 않는다면 conn.commit()을 해줘야 함

     conn.commit()
    
  2. 연결을 닫아야 함

    • 사용 후 반드시 conn.close()를 호출하여 리소스를 해제할 것
     conn.close()
    


MySQL 사용해보기

1. 데이터베이스 생성하기

import pymysql

# MySQL 서버에 연결 (데이터베이스 없이 연결)
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='1234',
    charset='utf8mb4',
    autocommit=True  # 자동 커밋 설정
)

try:
    with conn.cursor() as cursor:
        # 데이터베이스 생성
        sql = "CREATE DATABASE IF NOT EXISTS kobis CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
        cursor.execute(sql)

finally:
    conn.close()  # 연결 종료
  • 실행하고 DB를 확인해보면 ‘kobis’ 데이터베이스가 생겼음!

    Image

  • 테이블은 따로 넣어준게 없기 때문에 텅텅 비어있는 DB가 생성되어 있음
  • 테이블을 생성해보자!

2. 테이블 생성하기

import pymysql

# MySQL 'kobis' 데이터베이스에 연결
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='1234',
    db='kobis',
    charset='utf8mb4',
    autocommit=True
)

try:
    with conn.cursor() as cursor:
        # 테이블 생성 SQL
        sql = """
        CREATE TABLE IF NOT EXISTS results (
            id INT AUTO_INCREMENT PRIMARY KEY,
            name VARCHAR(255) NOT NULL,
            score FLOAT NOT NULL,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        );
        """
        cursor.execute(sql)

finally:
    conn.close()
  • 실행하고 다시 DB에 가보면 이렇게 ‘results’라는 테이블이 생성된 걸 확인할 수 있음!

    Image

  • 근데 DB와 table 생성을 한줄에 코딩할 수는 없을까?🤔

    • 당연히, 가능! 위의 두 코드를 합쳐주면 된다!

3. DB와 테이블 생성하기

import pymysql

# MySQL 서버 연결 및 DB 생성
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='1234',
    charset='utf8mb4',
    autocommit=True
)

try:
    with conn.cursor() as cursor:
        # 데이터베이스 및 테이블 생성
        cursor.execute("CREATE DATABASE IF NOT EXISTS kobis1 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;")
        cursor.execute("USE kobis1;")
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS results1 (
                id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(255) NOT NULL,
                score FLOAT NOT NULL,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            );
        """)


finally:
    conn.close()
  • 이렇게 하면 한번의 코드 실행으로 DB와 Table을 생성할 수 있음!

    Image

4. DB 삭제

import pymysql

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='1234',
    charset='utf8mb4',
    autocommit=True
)

try:
    with conn.cursor() as cursor:
        cursor.execute("DROP DATABASE IF EXISTS kobis1;")
finally:
    conn.close()


예제

  • Python에서 학생의 시험 점수 계산을 수행한 후, 그 결과값을 MySQL 테이블에 저장
import pymysql

# MySQL 서버 연결 및 DB 생성
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='1234',
    charset='utf8mb4',
    autocommit=True
)

try:
    with conn.cursor() as cursor:
        # 1. 데이터베이스 및 테이블 생성
        cursor.execute("CREATE DATABASE IF NOT EXISTS kobis CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;")
        cursor.execute("USE kobis;")
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS results (
                id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(255) NOT NULL,
                score FLOAT NOT NULL,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            );
        """)

        # 2. 학생들의 점수 입력
        students = [
            ("Bob", [78, 82, 80]),
            ("Charlie", [95, 92, 88]),
            ("David", [60, 70, 65])
        ]
        
        # 3. 평균 점수 계산 후 MySQL에 저장
        sql = "INSERT INTO results (name, score) VALUES (%s, %s)"
        values = [(name, sum(scores)/len(scores)) for name, scores in students]

        cursor.executemany(sql, values)


finally:
    conn.close()

Image



💡Today I Thought

오늘의 체크리스트

  • 알고리즘 코드카타 291-295
  • SQL 코드카타 89-90
  • LLM 특강듣기
  • LLM 메인과제 => 는 하다가 말았음..
  • TIL 작성
  • WIL 작성

회고

  오늘.. 왜이렇게 공부가 안되는건지..ㅎㅎ 눈이 와서 그런가☃️ 내일..이랑 모레의 나에게 할일 토스…

댓글남기기