# Data Persistence

The modules described in this chapter support storing Python data in a persistent form on disk. The `pickle` and `marshal` modules can turn many Python data types into a stream of bytes and then recreate the objects from the bytes. The various DBM-related modules support a family of hash-based file formats that store a mapping of strings to other strings.

The list of modules described in this chapter is:

- `pickle` — Python object serialization
  - Relationship to other Python modules
    - Comparison with `marshal`
    - Comparison with `json`
  - Data stream format
  - Module Interface
  - What can be pickled and unpickled?
  - Pickling Class Instances
    - Persistence of External Objects
    - Dispatch Tables
    - Handling Stateful Objects
  - Custom Reduction for Types, Functions, and Other Objects
  - Out-of-band Buffers
    - Provider API
    - Consumer API
    - Example
  - Restricting Globals
  - Performance
  - Examples
- `copyreg` — Register `pickle` support functions
  - Example
- `shelve` — Python object persistence
  - Restrictions
  - Example
- `marshal` — Internal Python object serialization
- `dbm` — Interfaces to Unix “databases”
  - `dbm.gnu` — GNU’s reinterpretation of dbm
  - `dbm.ndbm` — Interface based on ndbm
  - `dbm.dumb` — Portable DBM implementation
- `sqlite3` — DB-API 2.0 interface for SQLite databases
  - Introduction
  - Tutorial
  - Reference
    - Module functions and constants
    - Connection objects
    - Cursor objects
    - Row objects
    - Blob objects
    - PrepareProtocol objects
    - Exceptions
    - SQLite and Python types
  - How-to guides
    - Using placeholders to bind values in SQL queries
    - Using adapters to store custom Python types in SQLite databases
      - Letting your object adapt itself
      - Registering an adapter callable
    - Converting SQLite values to custom Python types
    - Default adapters and converters
    - Adapter and converter recipes
    - Using connection shortcut methods
    - Accessing columns by name instead of by index
    - Using the connection as a context manager
    - Working with SQLite URIs
  - Explanation
    - Transaction control