dbm — Unix "데이터베이스" 인터페이스
dbm — Unix "데이터베이스" 인터페이스
dbm은 DBM 데이터베이스 변종들에 대한 일반 인터페이스입니다. 지원되는 모듈로는 dbm.sqlite3(SQLite 백엔드), dbm.gnu(GNU 데이터베이스 매니저), dbm.ndbm(새 데이터베이스 매니저)이 있으며, 어느 것도 설치되어 있지 않으면 느리지만 단순한 dbm.dumb 구현이 사용됩니다. Oracle Berkeley DB용 타사 인터페이스도 있습니다.
본문
exception dbm.error는 지원되는 각 모듈이 발생시킬 수 있는 예외들을 담은 튜플이며, 첫 번째 항목으로 dbm.error라는 이름의 고유 예외도 함께 있습니다.
dbm.whichdb(filename)은 주어진 파일을 여는 데 사용해야 할 여러 단순 데이터베이스 모듈(dbm.sqlite3, dbm.gnu, dbm.ndbm, dbm.dumb) 중 어느 것을 추측하는 함수입니다. 다음과 같은 값을 반환합니다:
None— 파일을 열 수 없는 경우(읽을 수 없거나 존재하지 않음)- 빈 문자열(
'') — 파일 형식을 추측할 수 없는 경우 - 필요한 모듈 이름을 담은 문자열, 예:
'dbm.ndbm'또는'dbm.gnu'
3.11에서 filename은 path-like 객체를 받습니다.
dbm.open(file, flag='r', mode=0o666)는 데이터베이스를 열고 해당 데이터베이스 객체를 반환합니다. flag는 다음과 같습니다:
'r'(기본값): 기존 데이터베이스를 읽기 전용으로 엽니다.'w': 기존 데이터베이스를 읽기·쓰기로 엽니다.'c': 없으면 만들면서 읽기·쓰기로 엽니다.'n': 항상 새 빈 데이터베이스를 만들어 읽기·쓰기로 엽니다.
mode는 유닉스 파일 접근 모드(기본값 8진수 0o666)로, 데이터베이스를 만들어야 할 때만 사용됩니다. 데이터베이스 파일이 이미 존재하면 whichdb()로 타입을 판별해 적절한 모듈을 사용하고, 존재하지 않으면 위에 나열된 첫 번째 서브모듈 중 import 가능한 것을 사용합니다.
open()이 반환한 객체는 가변 매핑(mapping)의 기본 기능을 지원합니다. 키와 값을 저장, 검색, 삭제할 수 있고 반복, in 연산자, keys(), get(), setdefault(), clear() 메서드가 제공됩니다. keys() 메서드는 뷰(view) 객체 대신 리스트를 반환하고, setdefault()는 두 인자를 요구합니다. 키와 값은 항상 bytes로 저장됩니다. 즉 문자열을 사용하면 저장 전에 기본 인코딩으로 암시적 변환됩니다. 이 객체들은 with 문에서도 사용할 수 있어 끝나면 자동으로 닫힙니다.
예제:
import dbm
# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:
db[b'hello'] = b'there'
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
assert db[b'www.python.org'] == b'Python Website'
assert db['www.cnn.com'] == b'Cable News Network'
print(db.get('python.org', b'not present'))
db['www.yahoo.com'] = 4 # non-string value raises an exception
# db is automatically closed when leaving the with statement.
dbm.sqlite3 모듈은 표준 라이브러리 sqlite3 모듈을 사용해 SQLite 백엔드를 제공합니다 (3.13에서 추가). dbm.sqlite3이 만든 파일은 sqlite3이나 다른 SQLite 브라우저, SQLite CLI로 열 수 있습니다. dbm.sqlite3.open()은 SQLite 데이터베이스를 열고 유사한 flag를 지원하며, close() 메서드를 제공합니다.
dbm.gnu 모듈은 dbm.ndbm과 비슷하되 크래시 내성 같은 추가 기능이 있는 GDBM 라이브러리 인터페이스입니다. dbm.gnu와 dbm.ndbm이 만든 파일 형식은 호환되지 않아 서로 바꿔 쓸 수 없습니다. dbm.dumb는 단순 DBM 인터페이스의 이식 가능한 구현으로, 다른 백엔드를 사용할 수 없을 때의 폴백이며 close(), sync() 메서드를 제공합니다.