数据库及ORM基础

【笔记】算法概念

作者 Trekerz 日期 2017-02-28
数据库及ORM基础

一、 数据库概念

本书数据库是用E-R图建模、使用SQL或ORM进行交互的关系数据库系统。

1. Web开发中的数据库

(1) 网站系统的三层架构:客户端层(HTML、CSS、JavaScript)、业务逻辑层(Python)、数据访问层(Python)

​ a. 客户端层:直接服务于用户。(用户)

​ b. 业务逻辑层:为客户端层服务。(开发者)

​ c. 数据访问层:为业务逻辑层提供数据支持。(数据管理员)

所以,作为开发者需要具备数据库建模(E-R图)和开发数据访问代码(SQL或ORM)的能力。

同时,在Web架构设计期,也要考虑物理数据库的选型问题。

2. 关系型数据库建模

两个步骤:设计E-R图;关系表设计。

(1) 设计E-R图

实体的三种关系:一对一、一对多、多对多。

(2) 关系表设计

具体步骤:

​ a. 数据库选型。

​ b. 将每个实体转换为一个数据表。实体的属性为列,为每个列定义相应的数据类型。

​ c. 对于1:1关系的两个表,设置相同的主键列。

​ d. 对于1:N关系的两个表,在N表中添加一个外键列,该列与1表的主键相关联。

​ e. 对于M:N关系,生成一个单独的表表示该关系,该关系的列由两个表的主键组成。

​ f. 重新审核所有的表,对需要的地方添加约束,对常用的条件字段设置索引。

另外:Index、Constraint、PK、FK、NOT NULL。

二、 关系数据库编程

1. 常用SQL语句(6类)

​ (1) 数据定义语言(DDL)(数据管理员常用)

​ (2) 数据控制语言(DCL)(数据管理员常用)

​ (3) 数据查询语言(DQL)

​ (4) 数据操作语言(DML)

​ (5) 事务处理语言(TPL)

​ (6) 指针控制语言(CCL)(开发者所需技能)

常用语句

​ a. Insert

​ b. Delete

​ c. Update

​ d. Select(注意常用的SQL聚集函数)

​ e. 多表连接的Select语句(JOIN关键字)

​ f. 事务控制语句(控制多条SQL语句的数据一致性)

2. 实战:在Python中应用SQL

步骤:

​ a. 引入Python引擎包

​ b. 连接数据库

​ c. 获取游标

​ d. 执行SQL命令

​ e. 提交或回滚事务(执行DML类的语句时,数据库引擎会启动新事务)

​ f. 关闭游标

​ g. 关闭数据库连接

三、 ORM编程

ORM对象关系映射,就是在关系型数据库和业务实体对象之间做一个映射,这样开发者就不再使用SQL了,而是简单地操作对象的属性和方法即可。

ORM需要具备三个基本能力:映射技术、CRUD操作和缓存优化。

1. 映射技术

所有的ORM库都必须解决这3个映射问题:数据类型映射、类映射、关系映射。

2. CRUD操作

CRUD即增加、读取、更新、删除。所有ORM库必须有自己的一套CRUD方案。

(目前都是把调用转化为SQL语句,进而传给数据库引擎)

3. 缓存优化

由于数据库操作通常比较耗时,所以ORM要提供缓存的功能。

4. ORM的优点

​ (1) 向开发者屏蔽了SQL,提高了开发者效率。

​ (2) 便于数据库迁移。ORM引擎会处理不同数据库之间的差异。

​ (3) 缓存优化有时可以提高数据库操作效率。

5. Python ORM库介绍

​ (1) SQLAlchemy(最成熟,公认Python ORM的标准)

​ (2) Django ORM(大而全,但灵活性较低)

​ (3) Peewee(轻量级,小巧灵活)

​ (4) Storm(中型ORM)

​ (5) SQLObject(大而全,借鉴了Ruby on Rails的ActiveRecord模型)

6. 实战:Peewee库编程

步骤:

​ a. 引入Peewee包

​ b. 定义数据库实例,引入数据库文件

​ c. 定义ORM基类

​ d. 把每个数据表定义成一个子类,通过子类完成类型映射、表映射、关系映射。