Python tech/Python Experience

[Python] Numpy Array를 DB (SQLite)에 저장하기

콜레오네 2021. 3. 30. 03:15

Image Processing 관련 project 진행 도중

numpy array를 sqlite3에 저장할 필요가 생겼습니다.

 

방법을 찾던 도중 가장 괜찮은 방법을 소개하겠습니다.

 


우선, 필요한 모듈을 import 해줍니다.

import sqlite3, io

 

1. Numpy Array -> DB Text

> DB에 INSERT 할 때, array를 text로 변경해주는 함수입니다.

# nd.array to text  when Insert DB
def adapt_array(arr):
  """
  http://stackoverflow.com/a/31312102/190597 (SoulNibbler)
  """
  out = io.BytesIO()
  np.save(out, arr)
  out.seek(0)
  return sqlite3.Binary(out.read())

 

2. DB Text -> Numpy Array

> DB에서 SELECT 할 때, 다시 array로 반환해주는 함수입니다.

 

# text to nd.array when Select DB
def convert_array( text):
  out = io.BytesIO(text)
  out.seek(0)
  return np.load(out)

 


사용 방법

# connect SQLite
conn = sqlite3.connect(db_name, detect_types=sqlite3.PARSE_DECLTYPES)

# Converts np.array to TEXT when inserting
sqlite3.register_adapter(np.ndarray, adapt_array)
# Converts TEXT to np.array when selecting
sqlite3.register_converter("array", convert_array)

 

SQLite에 Connect 한 다음

위 코드와 같이 함수를 적용시켜 주어야 합니다.

 

아, 그리고

CREATE TABLE 할 때도 해당 변수 type은 array로 해주어야 합니다. (위 코드에서 "array"로 설정했기 때문)

반응형