第11章 用SQLite保存和获取对象

在许多应用中,需要完成对象的存储。在第9章“序列化和保存——JSON、YAML、Pickle、CSV和XML”中所介绍的技术主要是针对单一的对象。有时,我们需要从一个大的领域中分离出独立的对象来做持久化。比如将博客记录、博文、作者以及广告保存在一个单一的文件结构中。

在第10章“用Shelve保存和获取对象”中,介绍了将不同的Python对象使用一个shelve数据存储来保存。这使得我们可以为一个大的领域中的对象应用CRUD操作。任何单独的对象可以被创建、获取、修改或删除,而无需加载并转储整个文件。

在本章中,我们会介绍从 Python 对象到关系数据库的映射,尤其是 Python 中集成的sqlite3数据库,这将是三层架构设计中的另一个例子。

在这个设计中,SQLite数据层是一个比Shelve更复杂的数据库。在SQLite中可以使用锁来保证并发的更新操作。SQLite提供了一个基于SQL语言的访问层,可以通过将SQL表存储到文件系统中来完成持久化。使用数据库而非一个简单的文件来处理对单一数据池的并发更新,Web应用是其中的一个例子。还有RESTful的数据服务器,使用数据库来提供对持久化对象的访问。

从可扩展性来看,可以使用独立的数据库服务进程来隔离所有的数据库事物。这意味着它们可以位于相对安全的主机环境中,与Web应用的服务器分开,在防火墙的后面。例如MYSQL,可以作为独立的服务进程。SQLite不是独立的数据库服务,它必须作为宿主应用的一部分,而对于我们来说,Python就是宿主。

当使用SQLite时,会使用一个关系数据库和基于SQL语言的数据访问层。SQL语言是面向对象编程火热时期所遗留的一种语言。SQL语言侧重于面向过程编程,也是阻抗不匹配问题的来源,即关系数据模型与对象数据模型之间的不匹配。在SQL数据库中,我们主要侧重于数据模型的3个层面,如下所示。 ...

Get Python面向对象编程指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.