笨办法学 Python · 续 第六部分:SQL 和对象关系映射
2017-08-15 17:59
411 查看
第六部分:SQL 和对象关系映射
原文:Part VI: SQL and Object Relational Mapping译者:飞龙
协议:CC BY-NC-SA 4.0
自豪地采用谷歌翻译
在本书的这一部分中,我们将介绍一些内容,它们与本书其余部分的结构不相符,但对于初级开发人员来说,这是非常必要的主题。了解如何在 SQL 数据库中构造数据,会教给你如何在逻辑上思考数据存储需求。有一个建立已久的方法来解构数据,有效存储数据和访问数据。近年来 NoSQL 数据库的发展使其不同,但关系数据库设计背后的基本概念仍然有用。在你需要存储数据的每个地方,都需要良好地构造并理解数据。
大多数这些练习会让你涉及使用 SQL 数据库,因此,我建议你从 SQLite3 下载页面下载
sqlite3二进制文件,如果你还没有安装的话。我们使用 Python,所以它已经安装在大多数 Python 发行版中,但有时它不可用。如果你不能在你的 python shell 中运行这个 Python 代码:
>>> 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》,和一些时间。Joe 的书很厚,但很完整,他是 SQL 的大师。阅读这本书将使你非常能干。
相关文章推荐
- 详解python django面向关系数据库的ORM对象映射系统(1)
- python在window中显示内存对象关系图objgraph出错的应对办法
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- python下申明式的对象关系DB映射器--Pony
- SQL 类型到Java 类型的映射关系
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- 手机大数据_SQL映射对象_动软_代码模板_Models
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- iOS调试——部分日期字符串转换成NSDate对象为nil处理办法
- Hibernate基础学习(五)—对象-关系映射(下)
- 对象关系映射 EmitMapper 及Tuple的使用
- Hibernate 对象-关系映射(ORM)
- 第6 章对象/关系数据库映射基础(BasicO/R Mapping)
- 使用对象-关系映射(ORM)系统中间件提升软件开发效率及质量
- 弥合对象/关系之间的鸿沟(五)—— 映射(二)关系的映射
- 一张图明白python 生成器/迭代器/可迭代对象 之间的关系
- 『收集』学习笔记之什么是持久化和对象关系映射ORM技术
- ORM对象关系映射之GreenDAO高级用法
- Python ORM框架SQLAlchemy学习笔记之关系映射实例
- 解释对象/关系映射集成模块。