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 파일을 생성하여 이미지를 저장합니다.
결과
파일이 정상적으로 다운로드 되었습니다.