본문 바로가기
DBMS

[mysql] 파이썬으로 이미지 데이터 mysql에 저장하고 읽어들여오기

by code cleaner 2019. 7. 24.
반응형

1. 이미지 저장할 테이블 만들기

create table images(
    image_nm int auto_increment primary key,
    image_data blob) 

mysql 에서 이미지를 저장할 테이블을 간단하게 만든다.

base64로 변환하여 이미지를 저장할 예정이다.

base64는 이미지보다 용량이 125%로 커져서 저장된다는 단점이 있으나 안정적임.

blob: 바이너리를 저장할 수 있는 공간 
tinyblob 255byte
blob 64KB 
mediumblob 16MB
longblob 4G

mysql 데이터 타입에 대해 잘 나와있는 블로그 

https://ra2kstar.tistory.com/82

 

MySQL : 데이터 타입

MySQL MySQL 데이터 타입 MySQL 에서 사용하는 데이터 타입에 대해서 알아본다. CHAR 데이터 타입 CHAR와 VARCHAR(VARiable length CHARacter string)은 모두 텍스트 문자열을 허용하고, 필드의 크기를 제한한다...

ra2kstar.tistory.com

 

2. 파이썬에서 연결

import pandas as pd
from sqlalchemy import create_engine
from PIL import Image
import base64
from io import BytesIO
   
engine = create_engine('mysql+pymysql://사용자아이디:비밀번호@localhost/db명', echo = False)
buffer = BytesIO()
im = Image.open('이미지명.jpg')
# im.show()
   
im.save(buffer, format='jpeg')
img_str = base64.b64encode(buffer.getvalue())
print(img_str) # 변환된 데이터 확인 가능
   
img_df = pd.DataFrame({'image_data':[img_str]})

img_df.to_sql('images', con=engine, if_exists='append', index=False)

 

sqlalchemy 및 pandas의 to_sql를 사용하였다.

 

3. mysql에 넣은 데이터를 파이썬으로 다시 불러와서 이미지 확인하기

import pandas as pd
from sqlalchemy import create_engine
from PIL import Image
import base64
from io import BytesIO
  
engine = create_engine('mysql+pymysql://사용자아이디:비밀번호@localhost/db명', echo = False)
  
img_df = pd.read_sql(sql='select * from 테이블명' ,con=engine)
  
img_str = img_df['image_data'].values[0]
# print(type(img_str)) # data type이 'byte'이다.
  
img = base64.decodestring(img_str)
  
im = Image.open(BytesIO(img))
im.show()

끝~

반응형