본문 바로가기
Bigdata

Python - Databse BLOB 란? 사용법

by 올엠 2024. 3. 7.
반응형

BLOB(blob)는 Binary Large Object의 약자로써,

보통 기본적으로는 사진과 파일과 같은 블록형 데이터를 저장하는 용도이다.

따라서 Database의 자료 형태 역시 Byte를 기본으로 하고 있어서, 이러한 자료를 저장하는데 최적화 되어 있다고 할 수 있다.

그렇다면 Python에서는 어떻게 사용할 수 있을까?

가장 쉽게는 SQLachemy를 이용하는 방법이 있을 것이다.

 

1.  BLOB 데이터 입력하기

데이터를 입력하기 위해서는 먼저 SQLachemy 는 LargeBinary 라는 타입으로 선언해주는 것이 좋다.

아래는 클래스를 선언하는 예시이다.

from sqlalchemy import LargeBinary, MetaData

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    username = Column(String(20), unique=True)
    email = Column(String(100), unique=True)
    profile_img = Column(LargeBinary())

 

이후 데이터를 입력하기 위해서 다음과 같은 코드로 입력이 가능하다.

파일을  open 할때 byte 타입으로 열어야 하기 때문에 r이닌 rb로 오픈해야 한다.

f = open('./test/test.img', 'rb')
bytearray = f.read()
f.close()

new_user = User(
	username = 'test',
	email = 'test@asecurity.dev',
	profile_img = bytearray
	)

 

2. BLOB 데이터 가져오기

BLOB 데이터 읽기를 위한 방법은 2가지가 있는데, 가장 쉬운 방법은 ORM을 이용해서 구조를 파악한 후 Binary 속성으로 직접 접근하는 방법이 있다.

from sqlalchemy import create_engine, orm


engine = create_engine("sqlite:///database.sqlite")
session = orm.sessionmaker(bind=engine)()

record = session.query(MyModel).filter_by(id=1).first()
blob_data = record.blob_column.data

 

두번째로는 선호하는 방법은 load_binary() 함수 사용하여 데이터를 읽을 수 있다.

load_binary() 를 이용하면 무결성 보증하기 때문에 보다 안전하게 데이터를 읽어 들일 수 있다.
먼저 sqlalchemy.orm.Session 객체를 통해 데이터베이스에 연결하고 쿼리를 실행한다.
이후 쿼리 결과에서 BLOB 데이터가 들어있는 레코드를 가져온다.
그리고 load_binary() 함수를 이용하여 BLOB 데이터를 바이너리 데이터로 변환한다.

코드로는 다음과 같다.

from sqlalchemy import create_engine, orm

engine = create_engine("sqlite:///database.sqlite")
session = orm.sessionmaker(bind=engine)()

record = session.query(MyModel).filter_by(id=1).first()

blob_data = load_binary(record.blob_column)

 

 

 

 

반응형