# 第六部分:SQL 和对象关系映射
> 原文:[Part VI: SQL and Object Relational Mapping](https://learncodethehardway.org/more-python-book/part5.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
在本书的这一部分中,我们将介绍一些内容,它们与本书其余部分的结构不相符,但对于初级开发人员来说,这是非常必要的主题。了解如何在 SQL 数据库中构造数据,会教给你如何在逻辑上思考数据存储需求。有一个建立已久的方法来解构数据,有效存储数据和访问数据。近年来 NoSQL 数据库的发展使其不同,但关系数据库设计背后的基本概念仍然有用。在你需要存储数据的每个地方,都需要良好地构造并理解数据。
大多数这些练习会让你涉及使用 SQL 数据库,因此,我建议你从 [SQLite3 下载页面](https://www.sqlite.org/downloads.html)下载`sqlite3`二进制文件,如果你还没有安装的话。我们使用 Python,所以它已经安装在大多数 Python 发行版中,但有时它不可用。如果你不能在你的 python shell 中运行这个 Python 代码:
```py
>>> import sqlite3
```
你的 Python 就没有默认带有`sqlite3`。你需要弄清楚为什么会丢失,并且很可能有另外一个包,你需要先安装它才能在 Python 中使用。
## 理解 SQL 就是理解表
当你开始这部分的练习之前,你需要完整理解一个概念,它为许多 SQL 初学者造成了问题。
> SQL 数据库中的每个单独的东西都是一张表。
把它刻录到你的大脑里。对于“表”,我是说就像一个电子表格,其中左边有行,顶部有列。通常,你将使用进入该列的某种数据来命名列。那么每一行代表你需要放入表的一件事情。这可以是一个帐户,一个人的名单及其信息,菜谱,甚至汽车。每一行都是一辆汽车,每列是一些属性,关于你需要跟踪的那辆车。
这为大多数程序员造成了问题,因为我们按照树形结构思考问题。一个对象其中有另一个对象,对象里面有个列表,列表里面有个字典,字典里面有个字符串,字符串映射为数据。我们将东西嵌套在里面,而且这种风格的数据结构不适合表。对于大多数程序员来说,似乎这两个结构(表和树)不能共存,但是树和表实际上是非常相似的。你几乎可以使用任何树形结构,并将其映射到几乎任何矩阵上,但你必须了解 SQL 数据库的另一个方面:关系。
关系使得 SQL 数据库变得比电子表格更有用。电子表格可以让你创建一整套工作表,并在其中放置不同类型的数据,但是难以将这些工作表链接在一起。SQL 数据库的目的完全是,使你可以使用列或其他表将表链接在一起。SQL 数据库的天赋是,使用一个结构(表)来构建几乎任何类型的数据结构,你可以通过将它们链接在一起来实现。
我们将了解SQL数据库中的关系,但快速回答是,如果你可以创建一个数据树,那么你可以将该树放入1个或多个表中。在本书的这个阶段,我们可以简化将一组相关的Python类转换为SQL表的过程,如下所示:
+ 为所有类创建表。
+ 在子表中设置`id`列指向父表。
+ 在任何两个类“之间”创建链接表,这两个类通过列表链接。
它比这更复杂,但是,当将一组类转换为 SQL 时,这是所做事情的要点。事实上,大部分像 Django 这样的系统,是上述三件事情的复杂版本。
## 你会学到什么
本节的目的不是教你如何成为一个 SQL 系统管理员。如果你想做这个工作,那么我建议你学习有关 Unix 的一切,然后去获得一个公司的证书,这个公司提供技术认证。请记住,这不是一个非常有趣的工作,类似于看管一个大型的猫类动物园。猫,不是小猫。
在第六部分末尾,你将学到 SQL 在基本层面上的工作原理。这是一个 SQL 速成课,以你创建的对象关系映射器(ORM)结束,它与 Django 相似。本节仅仅是了解 SQL 工作方式的一个突破点,目的是为你提供足够的信息,来了解 Django 系统中发生的东西。
如果你想在你的工作中超出这个部分,我推荐 Joe Celko 的[《SQL For Smarties》](http://amzn.to/1QKi5iG),和一些时间。Joe 的书很厚,但很完整,他是 SQL 的大师。阅读这本书将使你非常能干。
- 笨办法学 Python · 续 中文版
- 引言
- 第一部分:预备知识
- 练习 0:起步
- 练习 1:流程
- 练习 2:创造力
- 练习 3:质量
- 第二部分:简单的黑魔法
- 练习 4:处理命令行参数
- 练习 5:cat
- 练习 6:find
- 练习 7:grep
- 练习 8:cut
- 练习 9:sed
- 练习 10:sort
- 练习 11:uniq
- 练习 12:复习
- 第三部分:数据结构
- 练习 13:单链表
- 练习 14:双链表
- 练习 15:栈和队列
- 练习 16:冒泡、快速和归并排序
- 练习 17:字典
- 练习 18:性能测量
- 练习 19:改善性能
- 练习 20:二叉搜索树
- 练习 21:二分搜索
- 练习 22:后缀数组
- 练习 23:三叉搜索树
- 练习 24:URL 快速路由
- 第四部分:进阶项目
- 练习 25:xargs
- 练习 26:hexdump
- 练习 27:tr
- 练习 28:sh
- 练习 29:diff和patch
- 第五部分:文本解析
- 练习 30:有限状态机
- 练习 31:正则表达式
- 练习 32:扫描器
- 练习 33:解析器
- 练习 34:分析器
- 练习 35:解释器
- 练习 36:简单的计算器
- 练习 37:小型 BASIC
- 第六部分:SQL 和对象关系映射
- 练习 38:SQL 简介
- 练习 39:SQL 创建
- 练习 40:SQL 读取
- 练习 41:SQL 更新
- 练习 42:SQL 删除
- 练习 43:SQL 管理
- 练习 44:使用 Python 的数据库 API
- 练习 45:创建 ORM
- 第七部分:大作业
- 练习 46:blog
- 练习 47:bc
- 练习 48:ed
- 练习 49:sed
- 练习 50:vi
- 练习 51:lessweb
- 练习 52:moreweb