[python] 파이썬에서 데이터베이스 연동 시 이미지 파일 데이터 다루기

파이썬을 사용하여 데이터베이스와의 연동 작업을 수행할 때, 일반적으로 텍스트 데이터만 다루는 것이 아니라 이미지 파일과 같은 이진(binary) 데이터를 다루어야 하는 경우가 있습니다. 이 글에서는 파이썬으로 데이터베이스에 이미지 파일을 저장하고 조회하는 방법에 대해 설명하겠습니다.

이미지 파일을 데이터베이스에 저장하기

1. 이미지 파일 열기

우선 이미지 파일을 파이썬에서 열어야 합니다. 예를 들어, Pillow 라이브러리를 사용하여 이미지를 열고 다룰 수 있습니다.

from PIL import Image

with open("image.jpg", "rb") as f:
    image = Image.open(f)

2. 이미지 데이터를 이진 형태로 변환

이미지 데이터를 데이터베이스에 저장하기 위해 이미지를 이진(binary) 형태로 변환해야 합니다. Pillow 라이브러리를 사용하여 이미지를 이진 형태로 변환할 수 있습니다.

import io

# 이미지 데이터를 in-memory binary stream으로 변환
image_binary = io.BytesIO()
image.save(image_binary, format="JPEG")
image_binary = image_binary.getvalue()

3. 데이터베이스에 이미지 저장

이진 데이터로 변환된 이미지를 데이터베이스에 저장할 수 있습니다. 데이터베이스 종류에 따라 BLOB(Binary Large OBject) 데이터 형식을 사용하여 이미지를 저장할 수 있습니다. 예를 들어, MySQL에서는 BLOB 형식의 컬럼을 사용하여 이미지를 저장할 수 있습니다.

import mysql.connector

# MySQL 데이터베이스 연결 설정
conn = mysql.connector.connect(
    host="localhost",
    user="username",
    password="password",
    database="dbname"
)

# 커서 생성
cursor = conn.cursor()

# 이미지 데이터를 데이터베이스에 저장
query = "INSERT INTO images (image_data) VALUES (%s)"
cursor.execute(query, (image_binary,))

# 변경사항 저장
conn.commit()

# 연결 종료
cursor.close()
conn.close()

데이터베이스에서 이미지 파일 조회하기

1. 데이터베이스에서 이미지 데이터 불러오기

저장된 이미지 데이터를 데이터베이스에서 불러오기 위해서는 적절한 쿼리를 사용하여 데이터를 가져와야 합니다.

import mysql.connector

# MySQL 데이터베이스 연결 설정
conn = mysql.connector.connect(
    host="localhost",
    user="username",
    password="password",
    database="dbname"
)

# 커서 생성
cursor = conn.cursor()

# 이미지 데이터 조회
query = "SELECT image_data FROM images WHERE image_id = %s"
cursor.execute(query, (image_id,))

image_data = cursor.fetchone()[0]

# 연결 종료
cursor.close()
conn.close()

2. 이미지 데이터를 파일로 변환

불러온 이미지 데이터를 파일로 변환하여 원본 이미지를 복원할 수 있습니다.

with open("restored_image.jpg", "wb") as f:
    f.write(image_data)

파이썬을 사용하여 데이터베이스와 이미지 파일을 다루는 방법에 대해 간략히 살펴보았습니다. 이미지 데이터를 다루는 과정은 데이터베이스 종류나 파이썬 라이브러리에 따라 조금씩 다를 수 있으므로, 실제 적용 시에는 해당 환경에 맞게 작업해야 합니다.