72
. . . . . . Python 与数据库 刘鑫 <[email protected]> 第三讲:从 SQLAlchemy 谈存储层架构 September 1, 2010

Python 数据库技术第三讲

Embed Size (px)

DESCRIPTION

Python 技术内训,数据库部分的第三讲 从SQLAlchemy谈面向存储层和数据库的开发

Citation preview

Page 1: Python 数据库技术第三讲

. . . . . .

Python 与数据库

刘鑫 <[email protected]>

第三讲:从 SQLAlchemy 谈存储层架构

September 1, 2010

Page 2: Python 数据库技术第三讲

. . . . . .

前情回顾

Page 3: Python 数据库技术第三讲

. . . . . .

Python 访问关系数据库有多种方法

Page 4: Python 数据库技术第三讲

. . . . . .

基础技能

标准接口 DBAPI

Page 5: Python 数据库技术第三讲

. . . . . .

有争议但值得关注

ORM

Page 6: Python 数据库技术第三讲

. . . . . .

推荐的 ORM

SQLAlchemy

Page 7: Python 数据库技术第三讲

. . . . . .

常见的与数据库有关的问题

Page 8: Python 数据库技术第三讲

. . . . . .

开发效率和代码质量

Page 9: Python 数据库技术第三讲

. . . . . .

运行效率

Page 10: Python 数据库技术第三讲

. . . . . .

其实这个不太常见

可移植性

Page 11: Python 数据库技术第三讲

. . . . . .

可重用性

Page 12: Python 数据库技术第三讲

. . . . . .

资源管理

Page 13: Python 数据库技术第三讲

. . . . . .

解决之道?

Page 14: Python 数据库技术第三讲

. . . . . .

良好的抽象

Page 15: Python 数据库技术第三讲

. . . . . .

适当组件化

Page 16: Python 数据库技术第三讲

. . . . . .

ORM and DAL

Page 17: Python 数据库技术第三讲

. . . . . .

Python 数据库访问工具的典范

Page 18: Python 数据库技术第三讲

. . . . . .

SQLAlchemy

Page 19: Python 数据库技术第三讲

. . . . . .

SQLAlchemy

Figure: SQLAlchemy 组成

Page 20: Python 数据库技术第三讲

. . . . . .

模型层

Page 21: Python 数据库技术第三讲

. . . . . .

模型层

Mapping 映射−−−→

{业务模型, 用户自定义的业务类Model, 数据模型

Page 22: Python 数据库技术第三讲

. . . . . .

模型层

数据模型 −→

Table, 数据表映射Field, 字段及复合列Query, 允许映射查询Relation, 各种关系

Page 23: Python 数据库技术第三讲

. . . . . .

映射工具

Mapping 将业务规则映射到模型

Page 24: Python 数据库技术第三讲

. . . . . .

映射工具

MetaData 将模型与操作映射到 Engine

Page 25: Python 数据库技术第三讲

. . . . . .

映射工具

MetaData 反射元信息

Page 26: Python 数据库技术第三讲

. . . . . .

会话层

Page 27: Python 数据库技术第三讲

. . . . . .

会话层

Session 是 SQLALchemy 体系中的架构核心

Page 28: Python 数据库技术第三讲

. . . . . .

可以管理多个 Engine

Page 29: Python 数据库技术第三讲

. . . . . .

分布式事务

Page 30: Python 数据库技术第三讲

. . . . . .

两阶段提交

Page 31: Python 数据库技术第三讲

. . . . . .

分布式事务

eng ine1 = c r e a t e e n g i n e ( ’ p o s t g r e s q l : // db1 ’ )eng ine2 = c r e a t e e n g i n e ( ’ p o s t g r e s q l : // db2 ’ )S e s s i o n = se s s i onmake r ( twophase=True )S e s s i o n . c o n f i g u r e ( b i nd s={User : eng ine1 , Account : eng ine2 })s e s s i o n = S e s s i o n ( )

Page 32: Python 数据库技术第三讲

. . . . . .

SQL Expression

Page 33: Python 数据库技术第三讲

. . . . . .

智能数据对象

Page 34: Python 数据库技术第三讲

. . . . . .

连接层

Page 35: Python 数据库技术第三讲

. . . . . .

Engine 可以作为会话引擎

Page 36: Python 数据库技术第三讲

. . . . . .

Engine

也可以独立使用

Page 37: Python 数据库技术第三讲

. . . . . .

Engine

连接池

Page 38: Python 数据库技术第三讲

. . . . . .

Engine

Connection 管理

Page 39: Python 数据库技术第三讲

. . . . . .

Engine

数据库元信息

Page 40: Python 数据库技术第三讲

. . . . . .

Connection

Page 41: Python 数据库技术第三讲

. . . . . .

Connection

强化的 DBAPI Connection+cursor

Page 42: Python 数据库技术第三讲

. . . . . .

Connection

参数安全

Page 43: Python 数据库技术第三讲

. . . . . .

Connection

更友好的结果集

Page 44: Python 数据库技术第三讲

. . . . . .

Connection

完整的事务控制

Page 45: Python 数据库技术第三讲

. . . . . .

Connection

可理解模型操作

Page 46: Python 数据库技术第三讲

. . . . . .

经典示范

Page 47: Python 数据库技术第三讲

. . . . . .

Pylons

Page 48: Python 数据库技术第三讲

. . . . . .

turbogears

Page 49: Python 数据库技术第三讲

. . . . . .

怪 · 力 · 乱 · 神

Page 50: Python 数据库技术第三讲

. . . . . .

Socrateshttp://bitbucket.org/March/socrates

Page 51: Python 数据库技术第三讲

. . . . . .

doctest

Page 52: Python 数据库技术第三讲

. . . . . .

Storage. init

运行时建模

Page 53: Python 数据库技术第三讲

. . . . . .

Storage.registeType

动态建模

Page 54: Python 数据库技术第三讲

. . . . . .

Subject

自定义容器

Page 55: Python 数据库技术第三讲

. . . . . .

Segment/Subject

业务规则封装

Page 56: Python 数据库技术第三讲

. . . . . .

一家之言

面向数据库的架构设计

Page 57: Python 数据库技术第三讲

. . . . . .

有效管理资源

Page 58: Python 数据库技术第三讲

. . . . . .

合理建模,防止过度设计

Page 59: Python 数据库技术第三讲

. . . . . .

保持敏捷,不过度优化

Page 60: Python 数据库技术第三讲

. . . . . .

基于运行时环境设计

Page 61: Python 数据库技术第三讲

. . . . . .

框架?

Page 62: Python 数据库技术第三讲

. . . . . .

操作系统?

Page 63: Python 数据库技术第三讲

. . . . . .

HTTP 服务和加载模式?

Page 64: Python 数据库技术第三讲

. . . . . .

多线程 vs 多进程?

Page 65: Python 数据库技术第三讲

. . . . . .

多进程

尽快完成

Page 66: Python 数据库技术第三讲

. . . . . .

多进程

保持和控制资源

Page 67: Python 数据库技术第三讲

. . . . . .

多进程

干净回收

Page 68: Python 数据库技术第三讲

. . . . . .

多线程

资源池

Page 69: Python 数据库技术第三讲

. . . . . .

多线程

警惕争用与死锁

Page 70: Python 数据库技术第三讲

. . . . . .

多线程

防止并发过度

Page 71: Python 数据库技术第三讲

. . . . . .

如何管好数据,是一门艺术

Page 72: Python 数据库技术第三讲

. . . . . .

谢谢大家!

再见!