# 第六部分: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