Download - Python 数据库技术讲座(二)
. . . . . .
对于 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
. . . . . .
谢谢大家!
再见!