Bigdata

Python - Databse BLOB 란? 사용법

올엠 2024. 3. 7. 16:40
반응형

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)

 

 

 

 

반응형