章节知识路线
- 6.1 简介
- 6.2 Python的DB-API
- 6.3 ORM
- 6.4 非关系数据库
- 6.5 相关文献
章节主张:数据库编程章真正搭建的是“长期数据结构”意识:脚本要变系统,最终都要回答数据如何建模、存储、查询与演进。
中文释读:DB-API 让你理解底层连接与游标,ORM 让你思考对象和表的映射,NoSQL 部分则提醒你不同数据访问模式需要不同存储策略。
第 6 章 数据库编程 199 本章会讨论如何使用 Python 与数据库进行通信。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 6.1 简介 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 6 章 数据库编程 199 本章会讨论如何使用 Python 与数据库进行通信。 文件或简单的持久化存储可以满足一些 小应用的需求,而大型服务器或高数据容量的应用则需要更加成熟的数据库系统。 本章会对 关系数据库、非关系数据库以及对象关系映射(ORM)进行介绍。
第 6 章 数据库编程 203 6.2 Python 的 DB-API 从哪里可以找到数据库相关的接口呢?
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 6.2 Python的DB-API 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 6 章 数据库编程 203 6.2 Python 的 DB-API 从哪里可以找到数据库相关的接口呢? 很简单,只需要前往 Python 官网的数据库主题部 分即可。 在那里,你可以找到全面的当前版本 DB-API (2.0 版本)的链接,包括数据库模块、 文档、特殊兴趣小组等。
226 第 1 部分 通用应用主题 第 141 行 该行是一个条件表达式(也可以解读为是 Python 的三元操作符),用于返回最后一次操 作后影响的行数,不过如果游标对象不支持该属性(即不兼容 DB-API),则返回−1。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 6.3 ORM 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
226 第 1 部分 通用应用主题 第 141 行 该行是一个条件表达式(也可以解读为是 Python 的三元操作符),用于返回最后一次操 作后影响的行数,不过如果游标对象不支持该属性(即不兼容 DB-API),则返回−1。 条件表达式是从 Python 2.5 开始引入的,所以如果你使用的是 2.4.x 或更老的版本,则需 要将其转回到旧式写法。 getRC = lambda cur: (hasattr(cur, 'rowcount') \ and [cur.rowcount] or [-1])[0] 如果你对这行代码感到一定的困惑,不需要太担心。
第 6 章 数据库编程 245 *** Randomly delete group (group #3; 2 users removed) LOGIN USERID PROJID Jess 7912 2 Ernie 7410 1 Melissa 8602 1 Serena 7003 1 Angela 7603 1 Aaron 8312 2 Jennifer 7608 1 Leslie 7808 2 Mona 7404 2 Larry 7311 1 Stan 7607 2 Jim 7512 2 Pat 7711 1 Amy 7209 2 Faye 6812 1 Dave 7306 2 *** Drop users table *** Close cxns $ 6.4 非关系数据库 本章开始介绍了 SQL 以及关系数据库。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 6.4 非关系数据库 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
第 6 章 数据库编程 245 *** Randomly delete group (group #3; 2 users removed) LOGIN USERID PROJID Jess 7912 2 Ernie 7410 1 Melissa 8602 1 Serena 7003 1 Angela 7603 1 Aaron 8312 2 Jennifer 7608 1 Leslie 7808 2 Mona 7404 2 Larry 7311 1 Stan 7607 2 Jim 7512 2 Pat 7711 1 Amy 7209 2 Faye 6812 1 Dave 7306 2 *** Drop users table *** Close cxns $ 6.4 非关系数据库 本章开始介绍了 SQL 以及关系数据库。 然后展示了如何从此类系统中获得和写入数据, 并且给出了移植到 Python 3 的简短教程。 之后又讲述了 ORM,以及 ORM 是如何让用户更多 地通过“对象”的方式来避免 SQL 语句的。
250 第 1 部分 通用应用主题 第 46~47 行 最后这个方法在应用执行关闭 MongoDB 服务器的连接时会定义和调用。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 6.5 相关文献 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
250 第 1 部分 通用应用主题 第 46~47 行 最后这个方法在应用执行关闭 MongoDB 服务器的连接时会定义和调用。 第 49~77 行 main()函数无需文档即可理解,并且随后的脚本和本章之前看到的应用基本相同:连接 数据库服务器并进行准备工作,向集合(“表”)中插入用户并转储数据库内容,将用户从一 个项目转移到另一个项目(并转储内容),删除一个完整的项目组(并转储内容),删除整个 集合,最后关闭连接。 尽管本节给出了 Python 中非关系数据库的使用方法,但是这只是开始。
252 第 1 部分 通用应用主题 除了数据库相关的模块/包外,下面还有一些网上的参考文献可供学习。
怎么用:把这节内容转成自己的一个最小脚本、接口实验或系统边界测试,验证它在真实任务中的输入输出。
提醒:最常见的问题是只记住 6.6 练习 的 API 或步骤,却没搞清它的上下游依赖与边界条件。
252 第 1 部分 通用应用主题 除了数据库相关的模块/包外,下面还有一些网上的参考文献可供学习。 Python 和数据库 wiki.python.org/moin/DatabaseProgramming wiki.python.org/moin/DatabaseInterfaces 数据库格式、结构及开发模式 en.wikipedia.org/wiki/DSN www.martinfowler.com/eaaCatalog/dataMapper.html en.wikipedia.org/wiki/Active_record_pattern blog.mongodb.org/post/114440717/bson 非关系数据库 en.wikipedia.org/wiki/Nosql nosql-database.org/ www.mongodb.org/display/DOCS/MongoDB,+CouchDB,+MySQL+Compare+Grid 6.6 练习 数据库 6-1 数据库 API。 什么是 Python 的 DB-API?
为什么很多“只是顺手存一下数据”的脚本后来会变成负担?