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"로 설정했기 때문)
반응형
'Python tech > Python Experience' 카테고리의 다른 글
Colab에서 내 구글 드라이브의 파일 불러오기 (0) | 2021.05.18 |
---|---|
[Python] DFS, BFS 알고리즘 (0) | 2021.04.14 |
[Python] PyQt5를 exe 파일로 만들기 (오류 해결 과정) (0) | 2020.12.29 |
[PyQt5] QPixmap에서 jpg 파일이 보이지 않는 현상 해결 (0) | 2020.12.28 |