# 11. 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 `bsddb` module also provides such disk-based string-to-string mappings based on hashing, and also supports B-Tree and record-based formats.

The list of modules described in this chapter is:

- 11.1. `pickle` — Python object serialization
  - 11.1.1. Relationship to other Python modules
  - 11.1.2. Data stream format
  - 11.1.3. Usage
  - 11.1.4. What can be pickled and unpickled?
  - 11.1.5. The pickle protocol
    - 11.1.5.1. Pickling and unpickling normal class instances
    - 11.1.5.2. Pickling and unpickling extension types
    - 11.1.5.3. Pickling and unpickling external objects
  - 11.1.6. Subclassing Unpicklers
  - 11.1.7. Example
- 11.2. `cPickle` — A faster `pickle`
- 11.3. `copy_reg` — Register `pickle` support functions
  - 11.3.1. Example
- 11.4. `shelve` — Python object persistence
  - 11.4.1. Restrictions
  - 11.4.2. Example
- 11.5. `marshal` — Internal Python object serialization
- 11.6. `anydbm` — Generic access to DBM-style databases
- 11.7. `whichdb` — Guess which DBM module created a database
- 11.8. `dbm` — Simple “database” interface
- 11.9. `gdbm` — GNU’s reinterpretation of dbm
- 11.10. `dbhash` — DBM-style interface to the BSD database library
  - 11.10.1. Database Objects
- 11.11. `bsddb` — Interface to Berkeley DB library
  - 11.11.1. Hash, BTree and Record Objects
- 11.12. `dumbdbm` — Portable DBM implementation
  - 11.12.1. Dumbdbm Objects
- 11.13. `sqlite3` — DB-API 2.0 interface for SQLite databases
  - 11.13.1. Module functions and constants
  - 11.13.2. Connection Objects
  - 11.13.3. Cursor Objects
  - 11.13.4. Row Objects
  - 11.13.5. SQLite and Python types
    - 11.13.5.1. Introduction
    - 11.13.5.2. Using adapters to store additional Python types in SQLite databases
      - 11.13.5.2.1. Letting your object adapt itself
      - 11.13.5.2.2. Registering an adapter callable
    - 11.13.5.3. Converting SQLite values to custom Python types
    - 11.13.5.4. Default adapters and converters
  - 11.13.6. Controlling Transactions
  - 11.13.7. Using `sqlite3` efficiently
    - 11.13.7.1. Using shortcut methods
    - 11.13.7.2. Accessing columns by name instead of by index
    - 11.13.7.3. Using the connection as a context manager
  - 11.13.8. Common issues
    - 11.13.8.1. Multithreading