Download - Python 数据库技术讲座(二)
![Page 2: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/2.jpg)
. . . . . .
对于 Python,数据库总是一种外部系统
![Page 3: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/3.jpg)
. . . . . .
需要管理连接资源
![Page 4: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/4.jpg)
. . . . . .
服务器 vs 内嵌
通常有独立的生命周期
![Page 5: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/5.jpg)
. . . . . .
可通过 SDK/API 访问
![Page 6: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/6.jpg)
. . . . . .
关系型数据库的标准接口DBAPI
![Page 7: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/7.jpg)
. . . . . .
DBAPI 的构成
![Page 8: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/8.jpg)
. . . . . .
核心组件
dbapi ⇒{
connect, 管理联接、事务,执行语句,生成操作游标cursor, 管理接收到的数据
![Page 9: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/9.jpg)
. . . . . .
基本的使用过程
![Page 10: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/10.jpg)
. . . . . .
获取连接
dbapi module connect()−−−−−→ connection
![Page 11: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/11.jpg)
. . . . . .
打开游标
connection .cursor()−−−−−→ cursor
![Page 12: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/12.jpg)
. . . . . .
执行语句
cursor .execute()−−−−−−→执行状态
![Page 13: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/13.jpg)
. . . . . .
处理数据集
cursor .fetchone()−−−−−−→逐行处理
![Page 14: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/14.jpg)
. . . . . .
处理数据集
cursor .fetchall()−−−−−→一次性处理整个结果集
![Page 15: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/15.jpg)
. . . . . .
完成事务
connection −→
{.commit() if ok.rollback() else
![Page 16: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/16.jpg)
. . . . . .
清理现场
connection .close()−−−−→结束访问
![Page 17: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/17.jpg)
. . . . . .
涉及的概念
![Page 18: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/18.jpg)
. . . . . .
联接
connection = dbapi.connect(...)
![Page 19: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/19.jpg)
. . . . . .
联接字符串
’host=xxx database=xxx user=xxx password=xxx’
![Page 20: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/20.jpg)
. . . . . .
游标
cursor=conn.cursor()
![Page 21: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/21.jpg)
. . . . . .
执行语句
status = cursor.execute(”...”)
![Page 22: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/22.jpg)
. . . . . .
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 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/23.jpg)
. . . . . .
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 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/24.jpg)
. . . . . .
事务
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 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/25.jpg)
. . . . . .
典型的 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 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/26.jpg)
. . . . . .
ORM 简介
![Page 27: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/27.jpg)
. . . . . .
DBAPI 很好
![Page 28: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/28.jpg)
. . . . . .
但是还不够好
![Page 29: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/29.jpg)
. . . . . .
关系 ⇐⇒ 阻抗不匹配
![Page 30: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/30.jpg)
. . . . . .
开发周期较长
![Page 31: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/31.jpg)
. . . . . .
不易调试
![Page 32: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/32.jpg)
. . . . . .
感觉不是很重要
不易移植
![Page 33: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/33.jpg)
. . . . . .
但这个与前一条有关
不易测试
![Page 34: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/34.jpg)
. . . . . .
……
![Page 35: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/35.jpg)
. . . . . .
但是!
![Page 36: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/36.jpg)
. . . . . .
Python 不需要 Hibernate!
![Page 37: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/37.jpg)
. . . . . .
我们需要的不仅是 O-R-M !
![Page 38: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/38.jpg)
. . . . . .
期待中的数据库访问工具
![Page 39: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/39.jpg)
. . . . . .
业务逻辑表达
![Page 40: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/40.jpg)
. . . . . .
模型转义RDB 数据 ⇐⇒ Python 数据结构
![Page 41: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/41.jpg)
. . . . . .
连接资源托管
![Page 42: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/42.jpg)
. . . . . .
分布存储
![Page 43: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/43.jpg)
. . . . . .
两阶段提交
![Page 44: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/44.jpg)
. . . . . .
对 SQL 直接操作友好
![Page 45: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/45.jpg)
. . . . . .
支持具体平台的特色功能
![Page 46: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/46.jpg)
. . . . . .
灵活利用 Python 语法
![Page 47: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/47.jpg)
. . . . . .
仿 SQL 调用
![Page 48: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/48.jpg)
. . . . . .
……
![Page 49: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/49.jpg)
. . . . . .
渣
SQLObject
![Page 50: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/50.jpg)
. . . . . .
比较渣
web2py dal
![Page 51: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/51.jpg)
. . . . . .
非常渣
Storm
![Page 52: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/52.jpg)
. . . . . .
经常被抱怨
Django ORM
![Page 53: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/53.jpg)
. . . . . .
简单型
web.py db
![Page 54: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/54.jpg)
. . . . . .
Python 的惊人生产力
很多 Web 框架都有自己的 ORM
![Page 55: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/55.jpg)
. . . . . .
唯一推荐!
![Page 56: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/56.jpg)
. . . . . .
SQLAlchemy
![Page 57: Python 数据库技术讲座(二)](https://reader034.vdocuments.mx/reader034/viewer/2022050700/558e11ae1a28ab6e128b465c/html5/thumbnails/57.jpg)
. . . . . .
谢谢大家!
再见!