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

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

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

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

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

이미지 파일을 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 파일을 생성하여 이미지를 저장합니다.

결과

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

답글 남기기

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