반응형
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)
반응형
'Bigdata' 카테고리의 다른 글
LLM.int8() - Large Language Model (LLM)의 계산 성능을 개선하기 위한 양자화 방법 (0) | 2024.06.08 |
---|---|
LLM - Llama2(라마2) 모델 개인 노트북으로 실행하기(CPU기반) (1) | 2024.06.08 |
Σ σ, ς / 시그마(sigma) - 뜻과 읽는법 (0) | 2024.06.07 |
Hugging Face - model(허깅페이스 모델) download 3가지 방법 (0) | 2024.04.12 |
랭체인/Langchain - 프로덕션에 사용해서는 않되는 이유, 주의점 (0) | 2024.02.17 |