Python 데이터 지속성-Shelve 모듈

Python 표준 라이브러리의 shelve 모듈은 간단하면서도 효과적인 객체 지속성 메커니즘을 제공합니다. 이 모듈에 정의 된 선반 객체는 디스크 파일에 지속적으로 저장되는 사전과 유사한 객체입니다. 이렇게하면 UNIX와 유사한 시스템에서 dbm 데이터베이스와 유사한 파일이 생성됩니다.

선반 사전에는 특정 제한이 있습니다. 이 특수 딕셔너리 객체에서는 문자열 데이터 유형 만 키로 사용할 수있는 반면, picklable Python 객체는 값으로 사용할 수 있습니다.

shelve 모듈은 다음과 같이 세 가지 클래스를 정의합니다.

Sr. 아니요 선반 모듈 및 설명
1

Shelf

선반 구현을위한 기본 클래스입니다. dict-like 객체로 초기화됩니다.

2

BsdDbShelf

Shelf 클래스의 하위 클래스입니다. 생성자에 전달 된 dict 객체는 first (), next (), previous (), last () 및 set_location () 메서드를 지원해야합니다.

DbfilenameShelf

이것은 또한 Shelf의 하위 클래스이지만 dict 객체가 아닌 생성자에 대한 매개 변수로 파일 이름을받습니다.

shelve 모듈에 정의 된 open () 함수는 DbfilenameShelf 목적.

open(filename, flag='c', protocol=None, writeback=False)

파일 이름 매개 변수는 생성 된 데이터베이스에 할당됩니다. 플래그 매개 변수의 기본값은 읽기 / 쓰기 액세스의 경우 'c'입니다. 다른 플래그는 'w'(쓰기 전용) 'r'(읽기 전용) 및 'n'(읽기 / 쓰기가있는 새 플래그)입니다.

직렬화 자체는 pickle 프로토콜에 의해 관리되며 기본값은 없음입니다. 기본적으로 마지막 매개 변수 쓰기 저장 매개 변수는 false입니다. true로 설정하면 액세스 된 항목이 캐시됩니다. 모든 액세스는 sync () 및 close () 작업을 호출하므로 프로세스가 느려질 수 있습니다.

다음 코드는 데이터베이스를 만들고 그 안에 사전 항목을 저장합니다.

import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()

그러면 현재 디렉터리에 test.dir 파일이 생성되고 키-값 데이터가 해시 된 형식으로 저장됩니다. 선반 객체는 다음과 같은 방법을 사용할 수 있습니다.

Sr. 아니. 방법 및 설명
1

close()

영구 dict 개체를 동기화하고 닫습니다.

2

sync()

쓰기 저장이 True로 설정된 선반이 열린 경우 캐시의 모든 항목을 다시 씁니다.

get()

키와 관련된 값을 반환합니다.

4

items()

튜플 목록 – 각 튜플은 키 값 쌍입니다.

5

keys()

선반 키 목록

6

pop()

지정된 키를 제거하고 해당 값을 반환합니다.

7

update()

다른 dict / iterable에서 선반 업데이트

8

values()

선반 값 목록

선반에있는 특정 키의 값에 액세스하려면-

s=shelve.open('test')
print (s['age']) #this will print 23
   s['age']=25
print (s.get('age')) #this will print 25
s.pop('marks') #this will remove corresponding k-v pair

내장 사전 객체에서와 마찬가지로 items (), keys () 및 values ​​() 메서드는 뷰 객체를 반환합니다.

print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]  

print (list(s.keys()))
['name', 'age', 'marks']

print (list(s.values()))
['Ajay', 25, 75]

다른 사전의 항목을 선반과 병합하려면 update () 메서드를 사용하십시오.

d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))

[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]