57
. . . . . . Python 与数据库 刘鑫 <[email protected]> 第二讲:数据库访问技术 August 31, 2010

Python 数据库技术讲座(二)

Embed Size (px)

DESCRIPTION

Python 数据库技术讲座 第二讲 DBAPI 与 ORM

Citation preview

Page 1: Python 数据库技术讲座(二)

. . . . . .

Python 与数据库

刘鑫 <[email protected]>

第二讲:数据库访问技术

August 31, 2010

Page 2: Python 数据库技术讲座(二)

. . . . . .

对于 Python,数据库总是一种外部系统

Page 3: Python 数据库技术讲座(二)

. . . . . .

需要管理连接资源

Page 4: Python 数据库技术讲座(二)

. . . . . .

服务器 vs 内嵌

通常有独立的生命周期

Page 5: Python 数据库技术讲座(二)

. . . . . .

可通过 SDK/API 访问

Page 6: Python 数据库技术讲座(二)

. . . . . .

关系型数据库的标准接口DBAPI

Page 7: Python 数据库技术讲座(二)

. . . . . .

DBAPI 的构成

Page 8: Python 数据库技术讲座(二)

. . . . . .

核心组件

dbapi ⇒{

connect, 管理联接、事务,执行语句,生成操作游标cursor, 管理接收到的数据

Page 9: Python 数据库技术讲座(二)

. . . . . .

基本的使用过程

Page 10: Python 数据库技术讲座(二)

. . . . . .

获取连接

dbapi module connect()−−−−−→ connection

Page 11: Python 数据库技术讲座(二)

. . . . . .

打开游标

connection .cursor()−−−−−→ cursor

Page 12: Python 数据库技术讲座(二)

. . . . . .

执行语句

cursor .execute()−−−−−−→执行状态

Page 13: Python 数据库技术讲座(二)

. . . . . .

处理数据集

cursor .fetchone()−−−−−−→逐行处理

Page 14: Python 数据库技术讲座(二)

. . . . . .

处理数据集

cursor .fetchall()−−−−−→一次性处理整个结果集

Page 15: Python 数据库技术讲座(二)

. . . . . .

完成事务

connection −→

{.commit() if ok.rollback() else

Page 16: Python 数据库技术讲座(二)

. . . . . .

清理现场

connection .close()−−−−→结束访问

Page 17: Python 数据库技术讲座(二)

. . . . . .

涉及的概念

Page 18: Python 数据库技术讲座(二)

. . . . . .

联接

connection = dbapi.connect(...)

Page 19: Python 数据库技术讲座(二)

. . . . . .

联接字符串

’host=xxx database=xxx user=xxx password=xxx’

Page 20: Python 数据库技术讲座(二)

. . . . . .

游标

cursor=conn.cursor()

Page 21: Python 数据库技术讲座(二)

. . . . . .

执行语句

status = cursor.execute(”...”)

Page 22: Python 数据库技术讲座(二)

. . . . . .

fetch all

f o r row i n c u r s o r . f e t c h a l l ( ) :. . .

Page 23: Python 数据库技术讲座(二)

. . . . . .

or fetch each

w h i l e True :row = c u r s o r . f e t c h on e ( )i f row :

. . .e l s e :

b reak. . .

Page 24: Python 数据库技术讲座(二)

. . . . . .

事务

conn . s e t i s o l a t i o n l e v e l ( n ). . .conn . commit ( ) #or . r o l l b a c k ( )

Page 25: Python 数据库技术讲座(二)

. . . . . .

典型的 DBAPI 应用

import psycopg2wi th conn as psycopg2 . connect ( . . . ) :

cu r = conn . c u r s o r ( )t ry :

cu r . e x e cu t e ( ’ s e l e c t ∗ from t where key=? ’ , ( param , ) )f o r row i n cu r . f e t c h on e ( ) :

dosomthing . . .conn . commit ( )

except e :l o g g e r . l o g ( e )conn . r o l l b a c ( )

Page 26: Python 数据库技术讲座(二)

. . . . . .

ORM 简介

Page 27: Python 数据库技术讲座(二)

. . . . . .

DBAPI 很好

Page 28: Python 数据库技术讲座(二)

. . . . . .

但是还不够好

Page 29: Python 数据库技术讲座(二)

. . . . . .

关系 ⇐⇒ 阻抗不匹配

Page 30: Python 数据库技术讲座(二)

. . . . . .

开发周期较长

Page 31: Python 数据库技术讲座(二)

. . . . . .

不易调试

Page 32: Python 数据库技术讲座(二)

. . . . . .

感觉不是很重要

不易移植

Page 33: Python 数据库技术讲座(二)

. . . . . .

但这个与前一条有关

不易测试

Page 34: Python 数据库技术讲座(二)

. . . . . .

……

Page 35: Python 数据库技术讲座(二)

. . . . . .

但是!

Page 36: Python 数据库技术讲座(二)

. . . . . .

Python 不需要 Hibernate!

Page 37: Python 数据库技术讲座(二)

. . . . . .

我们需要的不仅是 O-R-M !

Page 38: Python 数据库技术讲座(二)

. . . . . .

期待中的数据库访问工具

Page 39: Python 数据库技术讲座(二)

. . . . . .

业务逻辑表达

Page 40: Python 数据库技术讲座(二)

. . . . . .

模型转义RDB 数据 ⇐⇒ Python 数据结构

Page 41: Python 数据库技术讲座(二)

. . . . . .

连接资源托管

Page 42: Python 数据库技术讲座(二)

. . . . . .

分布存储

Page 43: Python 数据库技术讲座(二)

. . . . . .

两阶段提交

Page 44: Python 数据库技术讲座(二)

. . . . . .

对 SQL 直接操作友好

Page 45: Python 数据库技术讲座(二)

. . . . . .

支持具体平台的特色功能

Page 46: Python 数据库技术讲座(二)

. . . . . .

灵活利用 Python 语法

Page 47: Python 数据库技术讲座(二)

. . . . . .

仿 SQL 调用

Page 48: Python 数据库技术讲座(二)

. . . . . .

……

Page 49: Python 数据库技术讲座(二)

. . . . . .

SQLObject

Page 50: Python 数据库技术讲座(二)

. . . . . .

比较渣

web2py dal

Page 51: Python 数据库技术讲座(二)

. . . . . .

非常渣

Storm

Page 52: Python 数据库技术讲座(二)

. . . . . .

经常被抱怨

Django ORM

Page 53: Python 数据库技术讲座(二)

. . . . . .

简单型

web.py db

Page 54: Python 数据库技术讲座(二)

. . . . . .

Python 的惊人生产力

很多 Web 框架都有自己的 ORM

Page 55: Python 数据库技术讲座(二)

. . . . . .

唯一推荐!

Page 56: Python 数据库技术讲座(二)

. . . . . .

SQLAlchemy

Page 57: Python 数据库技术讲座(二)

. . . . . .

谢谢大家!

再见!