1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-28 12:02:19 +00:00
lmpythw-zh/part6.md
wizardforcel 33f2690b60 part6
2017-08-15 18:02:15 +08:00

48 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第六部分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 的大师。阅读这本书将使你非常能干。