dbm — Unix "데이터베이스" 인터페이스
dbm — Unix "데이터베이스" 인터페이스
dbm은 DBM 데이터베이스 변형들을 위한 일반 인터페이스예요. dbm.sqlite3, dbm.gnu, dbm.ndbm을 지원하며, 이 중 어떤 모듈도 설치되지 않았으면 느리지만 단순한 dbm.dumb 모듈 구현이 사용됩니다. Oracle Berkeley DB를 위한 서드파티 인터페이스도 있어요.
출처: Python 표준 라이브러리
본문
exception dbm.error — 지원되는 각 모듈이 일으킬 수 있는 예외를 담는 튜플로, 첫 항목은 dbm.error라는 이름의 유일한 예외예요. dbm.error가 발생할 때 후자가 사용됩니다.
dbm.whichdb(filename) — 주어진 파일을 여는 데 사용해야 할 여러 단순 데이터베이스 모듈(dbm.sqlite3, dbm.gnu, dbm.ndbm, dbm.dumb) 중 어느 것을 쓸지 추측하려 시도하는 함수예요. 다음 값 중 하나를 반환합니다.
- 파일을 읽을 수 없거나 존재하지 않아 열 수 없으면
None - 파일 형식을 추측할 수 없으면 빈 문자열(
'') - 필수 모듈 이름을 담은 문자열, 예:
'dbm.ndbm'또는'dbm.gnu'
버전 3.11 변경:
filename이 경로류 객체를 받아들입니다.
dbm.open(file, flag='r', mode=0o666) — 데이터베이스를 열고 해당 데이터베이스 객체를 반환해요.
file— 열 데이터베이스 파일. 파일이 이미 존재하면whichdb()로 타입을 결정해 적절한 모듈을 사용하고, 존재하지 않으면 위에 나열된 하위 모듈 중 import할 수 있는 첫 모듈을 사용해요.flag—'r'(기본): 기존 데이터베이스를 읽기 전용으로 열기.'w': 기존 데이터베이스를 읽고 쓰기로 열기.'c': 없으면 만들면서 읽고 쓰기로 열기.'n': 항상 새 빈 데이터베이스를 만들어 읽고 쓰기로 열기.mode— 파일의 Unix 파일 접근 모드(기본 8진수0o666), 데이터베이스를 만들어야 할 때만 사용.
open()이 반환하는 객체는 변경 가능한 매핑의 기본 기능을 지원해요. 키와 해당 값을 저장·검색·삭제할 수 있고, 반복, in 연산자, 메서드 keys(), get(), setdefault(), clear()를 사용할 수 있어요. keys() 메서드는 뷰 객체 대신 리스트를 반환하고, setdefault() 메서드는 인자 두 개를 요구합니다.
키와 값은 항상 bytes로 저장돼요. 즉 문자열을 쓰면 저장 전에 기본 인코딩으로 암시적으로 변환된다는 뜻입니다. 이 객체들은 with 문에서도 쓸 수 있으며, 끝나면 자동으로 닫힙니다.
버전 3.2 변경:
get()과setdefault()메서드가 모든 dbm 백엔드에서 사용 가능. 버전 3.4 변경:open()이 반환하는 객체에 컨텍스트 관리 프로토콜 네이티브 지원 추가. 버전 3.8 변경: 읽기 전용 데이터베이스에서 키를 삭제하면KeyError대신 데이터베이스 모듈 특정 예외 발생. 버전 3.13 변경:clear()메서드가 모든 dbm 백엔드에서 사용 가능.
다음 예는 몇몇 호스트 이름과 해당 제목을 기록한 뒤 데이터베이스 내용을 출력해요.
import dbm
# Open database, creating it if necessary.
with dbm.open('cache', 'c') as db:
# Record some values
db[b'hello'] = b'there'
db['www.python.org'] = 'Python Website'
db['www.cnn.com'] = 'Cable News Network'
# Note that the keys are considered bytes now.
assert db[b'www.python.org'] == b'Python Website'
# Notice how the value is now in bytes.
assert db['www.cnn.com'] == b'Cable News Network'
# Often-used methods of the dict interface work too.
print(db.get('python.org', b'not present'))
# Storing a non-string key or value will raise an exception (most
# likely a TypeError).
db['www.yahoo.com'] = 4
# db is automatically closed when leaving the with statement.
dbm.sqlite3 — dbm용 SQLite 백엔드
이 모듈은 표준 라이브러리 sqlite3 모듈을 사용해 dbm 모듈에 SQLite 백엔드를 제공해요. 따라서 dbm.sqlite3이 만든 파일은 sqlite3이나 SQLite CLI를 포함한 다른 SQLite 브라우저로 열 수 있습니다. (WASI·WebAssembly 미지원)
dbm.sqlite3.open(filename, /, flag='r', mode=0o666) — SQLite 데이터베이스를 열어요. 반환된 데이터베이스 객체는 변경 가능한 매핑처럼 동작하되, keys() 메서드는 리스트를 반환하고 setdefault() 메서드는 인자 두 개를 요구해요. with 키워드를 통한 "closing" 컨텍스트 매니저도 지원합니다.
dbm.gnu — GNU 데이터베이스 매니저
dbm.gnu 모듈은 dbm.ndbm 모듈과 비슷하지만 크래시 내성 같은 추가 기능이 있는 GDBM 라이브러리 인터페이스를 제공해요.
참고:
dbm.gnu와dbm.ndbm이 만드는 파일 형식은 호환되지 않아 서로 바꿔 쓸 수 없어요. (Unix 전용, 모바일·WebAssembly 미지원)
exception dbm.gnu.error — I/O 오류 같은 dbm.gnu 특정 오류에서 발생해요. 잘못된 키 지정 같은 일반 매핑 오류는 KeyError가 발생합니다.
dbm.gnu.open_flags — open()의 flag 매개변수가 지원하는 문자들의 문자열.
dbm.gnu.open(filename, flag='r', mode=0o666, /) — GDBM 데이터베이스를 열고 gdbm 객체를 반환해요. gdbm 객체는 변경 가능한 매핑처럼 동작하되, items(), values(), pop(), popitem(), update() 메서드는 지원되지 않고, keys()는 리스트를 반환하며, setdefault()는 인자 두 개를 요구해요. with 키워드로 "closing" 컨텍스트 매니저도 지원합니다.
dbm.ndbm — 새 데이터베이스 매니저
dbm.ndbm 모듈은 NDBM 라이브러리 인터페이스를 제공해요. "클래식" NDBM 인터페이스나 GDBM 호환 인터페이스와 함께 쓸 수 있습니다.
참고:
dbm.gnu와dbm.ndbm의 파일 형식은 호환되지 않아요. 경고: macOS에 포함된 NDBM 라이브러리는 값 크기에 문서화되지 않은 제한이 있어서, 이 제한보다 큰 값을 저장하면 데이터베이스 파일이 손상될 수 있어요. 손상된 파일을 읽으면 심각한 크래시(세그폴트)가 날 수 있습니다. (Unix 전용)
exception dbm.ndbm.error — I/O 오류 같은 dbm.ndbm 특정 오류에서 발생. 일반 매핑 오류는 KeyError.
dbm.ndbm.library — 사용된 NDBM 구현 라이브러리의 이름.
dbm.ndbm.open(filename, flag='r', mode=0o666, /) — NDBM 데이터베이스를 열고 ndbm 객체를 반환해요. ndbm 객체는 변경 가능한 매핑처럼 동작하되 items(), values(), pop(), popitem(), update()는 지원되지 않고, keys()는 리스트, setdefault()는 인자 두 개를 요구해요. with 키워드로 "closing" 컨텍스트 매니저도 지원합니다.
dbm.dumb — 휴대용 DBM 구현
참고:
dbm.dumb모듈은 더 견고한 모듈이 없을 때 dbm 모듈의 최후의 폴백으로 쓰기 위한 것입니다. 속도를 위해 쓰지 않았고 다른 데이터베이스 모듈만큼 많이 쓰이지 않아요.
dbm.dumb 모듈은 순수 Python으로 쓰여진 영속적 dict류 인터페이스를 제공해요. dbm.gnu 같은 다른 dbm 백엔드와 달리 외부 라이브러리가 필요 없습니다.
exception dbm.dumb.error — I/O 오류 같은 dbm.dumb 특정 오류에서 발생. 일반 매핑 오류는 KeyError.
dbm.dumb.open(filename, flag='c', mode=0o666) — dbm.dumb 데이터베이스를 열어요.
경고: 충분히 크고/복잡한 항목을 가진 데이터베이스를 로드하면 Python의 AST 컴파일러 스택 깊이 제한 때문에 Python 인터프리터가 크래시할 수 있어요.
flag가 'n'이면 항상 새 데이터베이스를 만들고, flag가 'r'이면 읽기 전용으로 열며(파일 없으면 만들지 않음), 'w'면 있어야만 열어요. 반환된 데이터베이스 객체는 변경 가능한 매핑처럼 동작하되, keys()와 items() 메서드는 리스트를 반환하고 setdefault()는 인자 두 개를 요구해요. with 키워드로 "closing" 컨텍스트 매니저도 지원합니다.
더 알아보기
- 원문: python: dbm — Interfaces to Unix "databases"
- shelve — 영속성 모듈 — 문자열이 아닌 데이터를 저장하는 모듈
- sqlite3 — SQLite 데이터베이스