Python 数据库技术讲座(二)

Preview:

DESCRIPTION

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

Citation preview

. . . . . .

Python 与数据库

刘鑫 <liuxin2@kingsoft.com>

第二讲:数据库访问技术

August 31, 2010

. . . . . .

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

. . . . . .

需要管理连接资源

. . . . . .

服务器 vs 内嵌

通常有独立的生命周期

. . . . . .

可通过 SDK/API 访问

. . . . . .

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

. . . . . .

DBAPI 的构成

. . . . . .

核心组件

dbapi ⇒{

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

. . . . . .

基本的使用过程

. . . . . .

获取连接

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

. . . . . .

打开游标

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

. . . . . .

执行语句

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

. . . . . .

处理数据集

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

. . . . . .

处理数据集

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

. . . . . .

完成事务

connection −→

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

. . . . . .

清理现场

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

. . . . . .

涉及的概念

. . . . . .

联接

connection = dbapi.connect(...)

. . . . . .

联接字符串

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

. . . . . .

游标

cursor=conn.cursor()

. . . . . .

执行语句

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

. . . . . .

fetch all

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

. . . . . .

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. . .

. . . . . .

事务

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 ( )

. . . . . .

典型的 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 ( )

. . . . . .

ORM 简介

. . . . . .

DBAPI 很好

. . . . . .

但是还不够好

. . . . . .

关系 ⇐⇒ 阻抗不匹配

. . . . . .

开发周期较长

. . . . . .

不易调试

. . . . . .

感觉不是很重要

不易移植

. . . . . .

但这个与前一条有关

不易测试

. . . . . .

……

. . . . . .

但是!

. . . . . .

Python 不需要 Hibernate!

. . . . . .

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

. . . . . .

期待中的数据库访问工具

. . . . . .

业务逻辑表达

. . . . . .

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

. . . . . .

连接资源托管

. . . . . .

分布存储

. . . . . .

两阶段提交

. . . . . .

对 SQL 直接操作友好

. . . . . .

支持具体平台的特色功能

. . . . . .

灵活利用 Python 语法

. . . . . .

仿 SQL 调用

. . . . . .

……

. . . . . .

SQLObject

. . . . . .

比较渣

web2py dal

. . . . . .

非常渣

Storm

. . . . . .

经常被抱怨

Django ORM

. . . . . .

简单型

web.py db

. . . . . .

Python 的惊人生产力

很多 Web 框架都有自己的 ORM

. . . . . .

唯一推荐!

. . . . . .

SQLAlchemy

. . . . . .

谢谢大家!

再见!

Recommended