Persistencia de datos
*********************

Los módulos descritos en este capítulo soportan el almacenamiento de
datos de Python de forma persistente en el disco. Los módulos "pickle"
y "marshal" pueden convertir muchos tipos de datos de Python en un
flujo de bytes y luego recrear los objetos a partir de los bytes. Los
diversos módulos relacionados con DBM admiten una familia de formatos
de archivo basados en hash que almacenan un mapeo de cadenas a otras
cadenas.

La lista de módulos descritos en este capítulo es:

* "pickle" --- Python object serialization

  * Relación con otros módulos de Python

    * Comparación con "marshal"

    * Comparación con "json"

  * Formato de flujo de datos

  * Interfaz del módulo

    * "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()"

  * ¿Qué se puede serializar (pickled) y deserializar (unpickled) con
    *pickle*?

  * *Pickling* de Instancias de clases

    * "__getnewargs_ex__()"

    * "__getnewargs__()"

    * "__getstate__()"

    * "__setstate__()"

    * "__reduce__()"

    * "__reduce_ex__()"

    * Persistencia de objetos externos

    * Tablas de despacho

    * Manejo de objetos con estado

  * Reducción personalizada para tipos, funciones y otros objetos

  * Búferes fuera de banda

    * API de proveedor

    * API de consumidor

    * Ejemplo

  * Restricción de globals

  * Performance

  * Ejemplos

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

  * "constructor()"

  * "pickle()"

  * Ejemplo

* "shelve" --- Python object persistence

  * "open()"

  * "sync()"

  * "close()"

  * Restricciones

    * "Shelf"

    * "BsdDbShelf"

    * "DbfilenameShelf"

  * Ejemplo

* "marshal" --- Internal Python object serialization

  * "dump()"

  * "load()"

  * "dumps()"

  * "loads()"

  * "version"

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

  * "error"

  * "whichdb()"

  * "open()"

  * "dbm.sqlite3" --- SQLite backend for dbm

    * "open()"

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

    * "error"

    * "open()"

      * "open_flags"

      * "firstkey()"

      * "nextkey()"

      * "reorganize()"

      * "sync()"

      * "close()"

      * "clear()"

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

    * "error"

    * "library"

    * "open()"

      * "close()"

      * "clear()"

  * "dbm.dumb" --- Implementación de DBM portátil

    * "error"

    * "open()"

      * "sync()"

      * "close()"

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

  * Tutorial

  * Referencia

    * Funciones del módulo

      * "connect()"

      * "complete_statement()"

      * "enable_callback_tracebacks()"

      * "register_adapter()"

      * "register_converter()"

    * Constantes del módulo

      * "LEGACY_TRANSACTION_CONTROL"

      * "PARSE_COLNAMES"

      * "PARSE_DECLTYPES"

      * "SQLITE_OK"

      * "SQLITE_DENY"

      * "SQLITE_IGNORE"

      * "apilevel"

      * "paramstyle"

      * "sqlite_version"

      * "sqlite_version_info"

      * "threadsafety"

      * "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"

    * Objetos de conexión

      * "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"

    * Objetos cursor

      * "Cursor"

        * "execute()"

        * "executemany()"

        * "executescript()"

        * "fetchone()"

        * "fetchmany()"

        * "fetchall()"

        * "close()"

        * "setinputsizes()"

        * "setoutputsize()"

        * "arraysize"

        * "connection"

        * "description"

        * "lastrowid"

        * "rowcount"

        * "row_factory"

    * Objetos fila (*Row*)

      * "Row"

        * "keys()"

    * Objetos fila (*Row*)

      * "Blob"

        * "close()"

        * "read()"

        * "write()"

        * "tell()"

        * "seek()"

    * Objetos PrepareProtocol

      * "PrepareProtocol"

    * Excepciones

      * "Warning"

      * "Error"

        * "sqlite_errorcode"

        * "sqlite_errorname"

      * "InterfaceError"

      * "DatabaseError"

      * "DataError"

      * "OperationalError"

      * "IntegrityError"

      * "InternalError"

      * "ProgrammingError"

      * "NotSupportedError"

    * SQLite y tipos de Python

    * Default adapters and converters (deprecated)

    * Command-line interface

  * Guías prácticas

    * Cómo usar marcadores de posición para vincular valores en
      consultas SQL

    * Cómo adaptar tipos de Python personalizados a valores de SQLite

      * Cómo escribir objetos adaptables

      * Como registrar un adaptador invocable

    * Como convertir valores SQLite a tipos de Python personalizados

    * Ejemplos para adaptadores y convertidores

    * Cómo utilizar los métodos de acceso directo de conexión

    * Como usar la conexión con un administrador de contexto

    * Como trabajar con URIs SQLite

    * How to create and use row factories

    * How to handle non-UTF-8 text encodings

  * Explicación

    * Control transaccional

      * Transaction control via the "autocommit" attribute

      * Transaction control via the "isolation_level" attribute
