这一周,你会了解什么是数据库,以及数据库的不同类型。接着,你将从Python3内置的SQLite着手,学习如何使用数据库。
然后,你要用SQL语言CRUD(create, retrieve, update, delete) SQLite。
接着,你要把API返回的数据储存到数据库中。
最后,把这些MVP组合起来,你就能在Web端接受用户输入,更新SQLite里的数据(比如允许用户更正数据库中某一城市的天气情况)。
接下来我们了解一下数据库的基础知识。
初探数据库
在了解数据库之前,我们先探索三个问题。
一、为什么要使用数据库存储数据(而不是文件)
这个问题非常有趣,我们需要通过实例来理解,假设我们现在成立了一个公司,要录入员工信息,通常的文件(比如excel表格,json文件)的办法是这样的:
| 员工姓名 | 负责区域 | 所属部门 | 部门主管 | 联系方式 | 工作时间 |
|---|---|---|---|---|---|
| 孙悟空 | 花果山 | 武装部 | 太上老君 | 紧箍咒 | 0:00~24:00 |
问题是,如果我想知道「花果山」还有哪些人负责,就要用复杂的方法重新组合这张表格(可能有好几步操作)。但数据库的方法是怎样的?数据库一般会创建很多个数据库表。比如:
A. 员工表
| 员工工号 | 姓名 | 电话 | 所属部门ID |
|---|---|---|---|
| S1 | 唐僧 | 42 | D1 |
B. 分公司表
| 分公司ID | 公司名 | 分公司领导 | 地址 |
|---|---|---|---|
| C1 | 高老庄催婚有限公司 | 老高 | 高老庄 |
C. 部门表
| 部门ID | 部门名称 | 部门领导 | 所属分公司的ID |
|---|---|---|---|
| D1 | Python取经打怪填坑部 | 唐僧 | C1 |
由此可见,数据库中数据表的格式更加简单,员工表全是员工,分公司表全是分公司,同时还有附加项目说明员工属于哪个部门。这就使得查询、更改、增加数据变得异常简单:假如我要把猪八戒调动到「盘丝洞分公司」,我只需要变更猪八戒的分公司ID假设我要增加「沙悟净」同事,在员工表里添加就好了。
这些操作在文件里面都是非常复杂的,而且不能理清彼此的关系。再举个现实点的例子,日本便利店的成功有一个原因是单品管理的实施:每个便利店的销售数据都会并到总公司的数据库。总公司的数据库管理人员,可以通过数据很快分析出「北京朝阳区」拖鞋(单品)销量增加很快,再一看新闻「朝阳区某大厦顶楼游泳池漏水,大厦内办公人员穿拖鞋上班」。于是他将这个事情反映给Boss,Boss立马从「朝阳周边地区调了1000双拖鞋到大厦旁边的三家便利店」。
二、数据库和数据库管理系统的关系是什么?
想象你有一个书架,书是数据库,整个书架是数据库管理系统。
DBMS(数据库管理系统Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管理员也通过DBMS进行数据库的维护工作。它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立、修改和访问数据库。DBMS提供数据定义语言DDL(Data Definition Language)与数据操作语言DML(Data Manipulation Language)供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。
三、什么是关系型数据库。
RDBMS:关系型数据库管理系统(Relational Database Management System)的概念更简单,就是在数据库管理系统的基础上增加关系。它通过数据、关系和对数据的约束三者组成的数据模型来存放和管理数据。
从20世纪80年代开始,数据库技术就进入了关系数据库时代。而数据库经历了网状数据库、层次数据库和关系数据库三个时代,我们现在接触到的基本上都是关系型数据库,而Microsoft SQL Server、MySQL、Oracle、DB2等也只是关系数据库中的一种。
四、什么是NoSQL?
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是“非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
Facebook使用的Apache Cassandra就是NoSQL(非关系型数据库),具有高度可扩展性。