# 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` — Serialización de objetos Python
  - 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
  - ¿Qué se puede serializar (pickled) y deserializar (unpickled) con pickle?
  - Pickling de Instancias de clases
    - 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` — Registrar funciones de soporte de `pickle`
  - Ejemplo
- `shelve` — Persistencia de objetos de Python
  - Restricciones
  - Ejemplo
- `marshal` — Serialización interna de objetos Python
- `dbm` — Interfaces para «bases de datos» de Unix
  - `dbm.gnu` — La reinterpretación de GNU de dbm
  - `dbm.ndbm` — Interfaz basada en ndbm
  - `dbm.dumb` — Implementación de DBM portátil
- `sqlite3` — DB-API 2.0 interfaz para bases de datos SQLite
  - Funciones y constantes del módulo
  - Objetos de conexión
  - Objetos Cursor
  - Objetos Fila (Row)
  - Excepciones
  - SQLite y tipos de Python
    - Introducción
    - Usando adaptadores para almacenar tipos adicionales de Python en bases de datos SQLite
      - Permitiéndole al objeto auto adaptarse
      - Registrando un adaptador invocable
    - Convertir valores SQLite a tipos de Python personalizados
    - Adaptadores y convertidores por defecto
  - Controlando Transacciones
  - Usando `sqlite3` eficientemente
    - Usando métodos atajo
    - Accediendo a las columnas por el nombre en lugar del índice
    - Usando la conexión como un administrador de contexto