콘텐츠로 건너뛰기
Home » 파이썬 이미지 파일 sqlite에 저장하기

파이썬 이미지 파일 sqlite에 저장하기

sqlite3 을 활용하여 이미지 또한 DB에 저장할 수 있습니다. 저장하는 방법은 이미지 파일을 바이너리(BLOB)파일로 변경해서 저장을 합니다.

BLOB 파일이란?
BLOB(대용량 바이너리 객체)는 일반적으로 이미지, 음악, 동영상, 문서, PDF 등과 같은 대용량 파일을 저장하는 SQLite 데이터 유형입니다. 파일과 이미지는 바이너리 데이터(Python의 바이트 배열)로 변환하여 SQLite 데이터베이스에 저장해야 합니다.

그럼 코드를 보시겠습니다.

이미지 파일을 BLOB 데이터로 변환

import sqlite3

def convertToBinaryData(filename):
    # 디지털 데이터를 바이너리 포멧으로 변경
    with open(filename, 'rb') as file:
        blobData = file.read()
    return blobData

def insertBLOB(title, image):
    try:
        sqliteConnection = sqlite3.connect('mydatabase.db')
        cursor = sqliteConnection.cursor()
        print("SQLite 연결 완료")
        sqlite_insert_blob_query = """ INSERT INTO test_table
                                  (title, image) VALUES (?, ?)"""

        BLOB_image = convertToBinaryData(image)
        # 튜플 포멧으로 데이터 변환
        data_tuple = (title, BLOB_image)
        cursor.execute(sqlite_insert_blob_query, data_tuple)
        sqliteConnection.commit()
        print("이미지 및 텍스트 DB 저장 완료")
        cursor.close()

    except sqlite3.Error as error:
        print("테이블 저장 실패", error)
    finally:
        if sqliteConnection:
            sqliteConnection.close()
            print("sqlite 연결 종료")

insertBLOB('쿠팡', './image/coupang_logo.jpg')

2개의 메소드를 작성했습니다.

  • 이미지 파일을 바이너리 포멧으로 변경 – convertToBinaryData
  • 테이블에 데이터 입력 – insertBLOB

이미지 파일 경로와 텍스트 데이터를 test_table에 insert하는 코드입니다. 에러가 발생하면 잡아낼 수 있게 try ~ except 구문을 넣어 작성했으며

맨 아랫줄 insertBLOB(‘쿠팡’, ‘./image/coupang_logo.jpg’)처럼 변수 값만 형식에 맞게 입력하면 DB에 데이터를 정상적으로 insert합니다.

결과

쿠팡, BLOB 데이터가 정확이 삽입되었습니다. BLOB 데이터가 정확히 입력되었는지 확인합니다.

DB browser for SQLite에서는 등록된 BLOB 데이터의 이미지를 확인할 수 있습니다. 정상적으로 입력된 것을 확인할 수 있었습니다.

그럼 이제 저장된 BLOB 데이터를 이미지 파일로 가지고 오는 법을 알아볼까요.

BLOB데이터를 이미지 파일로 변환

DB에 BLOB형식으로 저장된 데이터를 이미지 파일로 다운로드 하는 방법은 간단합니다.

import sqlite3

# SQLite 데이터베이스 연결
sqliteConnection = sqlite3.connect('mydatabase.db')
cursor = sqliteConnection.cursor()

image_file = "SELECT image FROM test_table"
# 데이터 조회
cursor.execute(image_file)
image_file = cursor.fetchone()
image_file = image_file[0]

# 연결 종료
sqliteConnection.close()

# 이미지 파일 확인
print(image_file)

# 이미지 파일 생성
fw = open("./test.jpg", "wb")
fw.write(image_file)
fw.close()

select문으로 이미지를 검색하여 test.jpg 파일을 생성하여 이미지를 저장합니다.

결과

파일이 정상적으로 다운로드 되었습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다