一、 数据库概念
本书数据库是用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. 把每个数据表定义成一个子类,通过子类完成类型映射、表映射、关系映射。