데이터 지속성
*************

이 장에서 설명하는 모듈은 파이썬 데이터를 디스크에 지속적인 형태로 저
장하는 것을 지원합니다. "pickle"과 "marshal" 모듈은 많은 파이썬 데이터
형을 바이트 스트림으로 바꿀 수 있고 그 바이트열로부터 객체를 재생성할
수 있습니다. 다양한 DBM 관련 모듈은 문자열에서 다른 문자열로의 매핑을
저장하는 일군의 해시 기반 파일 형식을 지원합니다.

이 장에서 설명하는 모듈 목록은 다음과 같습니다:

* "pickle" --- Python object serialization

  * 다른 파이썬 모듈과의 관계

    * "marshal" 과의 비교

    * "json" 과의 비교

  * 데이터 스트림 형식

  * 모듈 인터페이스

    * "HIGHEST_PROTOCOL"

    * "DEFAULT_PROTOCOL"

    * "dump()"

    * "dumps()"

    * "load()"

    * "loads()"

    * "PickleError"

    * "PicklingError"

    * "UnpicklingError"

    * "Pickler"

      * "dump()"

      * "persistent_id()"

      * "dispatch_table"

      * "reducer_override()"

      * "fast"

    * "Unpickler"

      * "load()"

      * "persistent_load()"

      * "find_class()"

    * "PickleBuffer"

      * "raw()"

      * "release()"

  * 어떤 것이 피클 되고 역 피클 될 수 있을까요?

  * 클래스 인스턴스 피클링

    * "__getnewargs_ex__()"

    * "__getnewargs__()"

    * "__getstate__()"

    * "__setstate__()"

    * "__reduce__()"

    * "__reduce_ex__()"

    * 외부 객체의 지속성

    * 디스패치 테이블

    * 상태 저장 객체 처리

  * 형, 함수 및 기타 객체에 대한 사용자 정의 환원

  * 아웃 오브 밴드 버퍼

    * 제공자 API

    * 소비자 API

    * 예제

  * 전역 제한하기

  * 성능

  * 예제

* "copyreg" --- Register "pickle" support functions

  * "constructor()"

  * "pickle()"

  * 예제

* "shelve" --- Python object persistence

  * "open()"

  * "sync()"

  * "close()"

  * 제약 사항

    * "Shelf"

    * "BsdDbShelf"

    * "DbfilenameShelf"

  * 예제

* "marshal" --- Internal Python object serialization

  * "dump()"

  * "load()"

  * "dumps()"

  * "loads()"

  * "version"

* "dbm" --- Interfaces to Unix "databases"

  * "error"

  * "whichdb()"

  * "open()"

  * "dbm.gnu" --- GNU database manager

    * "error"

    * "open()"

      * "open_flags"

      * "firstkey()"

      * "nextkey()"

      * "reorganize()"

      * "sync()"

      * "close()"

  * "dbm.ndbm" --- New Database Manager

    * "error"

    * "library"

    * "open()"

      * "close()"

  * "dbm.dumb" --- 이식성 있는 DBM 구현

    * "error"

    * "open()"

      * "sync()"

      * "close()"

* "sqlite3" --- DB-API 2.0 interface for SQLite databases

  * Tutorial

  * Reference

    * Module functions

      * "connect()"

      * "complete_statement()"

      * "enable_callback_tracebacks()"

      * "register_adapter()"

      * "register_converter()"

    * Module constants

      * "LEGACY_TRANSACTION_CONTROL"

      * "PARSE_COLNAMES"

      * "PARSE_DECLTYPES"

      * "SQLITE_OK"

      * "SQLITE_DENY"

      * "SQLITE_IGNORE"

      * "apilevel"

      * "paramstyle"

      * "sqlite_version"

      * "sqlite_version_info"

      * "threadsafety"

      * "version"

      * "version_info"

      * "SQLITE_DBCONFIG_DEFENSIVE"

      * "SQLITE_DBCONFIG_DQS_DDL"

      * "SQLITE_DBCONFIG_DQS_DML"

      * "SQLITE_DBCONFIG_ENABLE_FKEY"

      * "SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER"

      * "SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION"

      * "SQLITE_DBCONFIG_ENABLE_QPSG"

      * "SQLITE_DBCONFIG_ENABLE_TRIGGER"

      * "SQLITE_DBCONFIG_ENABLE_VIEW"

      * "SQLITE_DBCONFIG_LEGACY_ALTER_TABLE"

      * "SQLITE_DBCONFIG_LEGACY_FILE_FORMAT"

      * "SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE"

      * "SQLITE_DBCONFIG_RESET_DATABASE"

      * "SQLITE_DBCONFIG_TRIGGER_EQP"

      * "SQLITE_DBCONFIG_TRUSTED_SCHEMA"

      * "SQLITE_DBCONFIG_WRITABLE_SCHEMA"

    * Connection objects

      * "Connection"

        * "cursor()"

        * "blobopen()"

        * "commit()"

        * "rollback()"

        * "close()"

        * "execute()"

        * "executemany()"

        * "executescript()"

        * "create_function()"

        * "create_aggregate()"

        * "create_window_function()"

        * "create_collation()"

        * "interrupt()"

        * "set_authorizer()"

        * "set_progress_handler()"

        * "set_trace_callback()"

        * "enable_load_extension()"

        * "load_extension()"

        * "iterdump()"

        * "backup()"

        * "getlimit()"

        * "setlimit()"

        * "getconfig()"

        * "setconfig()"

        * "serialize()"

        * "deserialize()"

        * "autocommit"

        * "in_transaction"

        * "isolation_level"

        * "row_factory"

        * "text_factory"

        * "total_changes"

    * Cursor objects

      * "Cursor"

        * "execute()"

        * "executemany()"

        * "executescript()"

        * "fetchone()"

        * "fetchmany()"

        * "fetchall()"

        * "close()"

        * "setinputsizes()"

        * "setoutputsize()"

        * "arraysize"

        * "connection"

        * "description"

        * "lastrowid"

        * "rowcount"

        * "row_factory"

    * Row objects

      * "Row"

        * "keys()"

    * Blob objects

      * "Blob"

        * "close()"

        * "read()"

        * "write()"

        * "tell()"

        * "seek()"

    * PrepareProtocol objects

      * "PrepareProtocol"

    * 예외

      * "Warning"

      * "Error"

        * "sqlite_errorcode"

        * "sqlite_errorname"

      * "InterfaceError"

      * "DatabaseError"

      * "DataError"

      * "OperationalError"

      * "IntegrityError"

      * "InternalError"

      * "ProgrammingError"

      * "NotSupportedError"

    * SQLite 와 파이썬 형

    * Default adapters and converters (deprecated)

    * Command-line interface

  * How-to guides

    * How to use placeholders to bind values in SQL queries

    * How to adapt custom Python types to SQLite values

      * How to write adaptable objects

      * How to register adapter callables

    * How to convert SQLite values to custom Python types

    * Adapter and converter recipes

    * How to use connection shortcut methods

    * How to use the connection context manager

    * How to work with SQLite URIs

    * How to create and use row factories

    * How to handle non-UTF-8 text encodings

  * Explanation

    * Transaction control

      * Transaction control via the "autocommit" attribute

      * Transaction control via the "isolation_level" attribute
