# 数据持久化

本章中描述的模块支持在磁盘上以持久形式存储 Python 数据。 `pickle` 和 `marshal` 模块可以将许多 Python 数据类型转换为字节流，然后从字节中重新创建对象。 各种与 DBM 相关的模块支持一系列基于散列的文件格式，这些格式存储字符串到其他字符串的映射。

本章中描述的模块列表是：

- `pickle` —— Python 对象序列化
  - 与其他 Python 模块间的关系
    - 与 `marshal` 间的关系
    - 与 `json` 模块的比较
  - 数据流格式
  - 模块接口
  - 可以被打包/解包的对象
  - 打包类实例
    - 持久化外部对象
    - Dispatch 表
    - 处理有状态的对象
  - 限制全局变量
  - 性能
  - 例子
- `copyreg` --- 注意 `pickle` 支持函数
  - 示例
- `shelve` --- Python 对象持久化
  - 限制
  - 示例
- `marshal` --- 内部 Python 对象序列化
- `dbm` --- Unix "数据库" 接口
  - `dbm.gnu` --- GNU 对 dbm 的重解析
  - `dbm.ndbm` --- 基于 ndbm 的接口
  - `dbm.dumb` --- 便携式 DBM 实现
- `sqlite3` --- SQLite 数据库 DB-API 2.0 接口模块
  - 模块函数和常量
  - 连接对象（Connection）
  - Cursor 对象
  - 行对象*Row*
  - 异常
  - SQLite 与 Python 类型
    - 概述
    - 使用适配器将额外的 Python 类型保存在 SQLite 数据库中。
      - 让对象自行调整
      - 注册可调用的适配器
    - 将SQLite 值转换为自定义Python 类型
    - 默认适配器和转换器
  - 控制事务
  - 有效使用 `sqlite3`
    - 使用快捷方式
    - 通过名称而不是索引访问索引
    - 使用连接作为上下文管理器
  - 常见问题
    - 多线程