python levelDB 간단한 사용 예제
Deep-Learning 공부 중 levelDB가 언급되 이에 대해 알아보았다.
LevelDB는 오픈 소스(https://github.com/google/leveldb)이며 Unix 기반 시스템, macOS,
windows, android로 포팅 되어있다고 한다. Google의 Sanjay Ghemawat과 Jeff
Dean이 만들었다고 한다. LevelDB는 SQL DB가 아니며, 키와 값을 임의의 배열로
저장하고 데이터는 키 별로 정렬된다고 한다.
- python에서 leveldb 설치
python:
pip install leveldb
아나콘다:
conda install python-leveldb
- leveldb 사용 예
1. db 열기
import leveldb
db = leveldb.LevelDB('my_first_leveldb',create_if_missing=True)
위 코드를 실행하면, 'my_first_leveldb' 폴더가 생성되며, 아래와 같은 파일들이
생성된다.
2. 쓰기와 읽기
leveldb에 데이터를 쓸 때는 Put('key', 'value')를 사용하고, 읽을 때는
Get('key')를 사용한다. 같은 key로 데이터를 새로 써 넣으면, 마지막 쓴 값으로
업데이트 된다.
ex)
db.Put('mango', '10')
db.Get('mango')
10
만약 python 버전에 따라 아래와 같이 TypeError가 발생할 경우 'str'을
'bytes-like object'로 변경해줘야 한다.
---------------------------------------------------------------------------
TypeError
Traceback (most recent call last)
<ipython-input-2-63eb1dec4d91> in
<module>
----> 1 db.Put("mango","10")
TypeError: a bytes-like object is required, not 'str'
'str'과 'bytes-like object'는 다음과 같이 서로 변경할 수 있다.
'str'.encode() = ‘bytes-like object'
‘bytes-like object'.decode() = 'str'
db.Put("mango".encode(),"10".encode()) or db.Put(b’mango’, b’10’)
db.Get("mango".encode()).decode() or db.Get(b’mango’).decode()
3. 키 삭제
Delete('key')를 통해 키를 삭제할 수 있다.
db.Delete(b'mango')
삭제된 Key의 값을 Get을 통해 읽으려 할 경우 아래와 같이 KeyError가
발생한다.
db.Get(b'mango')
---------------------------------------------------------------------------
KeyError
Traceback (most recent call last)
<ipython-input-18-b54e2655bb7b> in
<module>
----> 1 db.Get(b'mango')
KeyError:
이런 경우 간단히 try 문을 사용해 에러를 피해갈 수 있다.
vlaue = '키 없어요'
try:
value = db.Get(b'mango').decode()
except KeyError:
pass
print(vlaue)
키 없어요
4. Iterable object
RangeIter()를 사용하면 된다. 아래의 예제처럼 하면 생선된 levelDB의 모든 키와
데이터를 가져올 수 있다.
Ex)
list = [['mango','100'],['apple','10'],['orange','20']]
for key, val in list:
db.Put(key.encode(), val.encode())
for key, val in db.RangeIter():
print(key.decode(), val.decode())
apple 10
mango 100
orange 20
댓글
댓글 쓰기