SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Downloaden Sie, um offline zu lesen
Python 与数据库

刘鑫 <liuxin2@kingsoft.com>

    第二讲:数据库访问技术


     August 31, 2010




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




                .   .   .   .   .   .
需要管理连接资源




           .   .   .   .   .   .
服务器 vs 内嵌




            通常有独立的生命周期




                     .   .   .   .   .   .
可通过 SDK/API 访问




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




          .   .   .   .   .   .
DBAPI 的构成




            .   .   .   .   .   .
核心组件




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




                                   .   .   .   .   .   .
基本的使用过程




          .   .   .   .   .   .
获取连接




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




                               .   .   .   .   .   .
打开游标




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




                             .   .   .   .   .   .
执行语句




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




                         .   .   .   .   .   .
处理数据集




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




                           .   .   .   .   .   .
处理数据集




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




                          .   .   .   .   .   .
完成事务




                      {
                          .commit() if ok
       connection →
                  −
                          .rollback() else




                                     .   .   .   .   .   .
清理现场




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




                          .    .   .   .   .   .
涉及的概念




        .   .   .   .   .   .
联接




     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 o n e ( )
                i f row :
                      ...
                else :
                     break
                 ...




                                                          .   .   .   .   .   .
事务




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




                                                  .   .   .   .   .   .
典型的 DBAPI 应用



  import p s y c o p g 2
  w i t h conn a s p s y c o p g 2 . c o n n e c t ( . . . ) :
         c u r = conn . c u r s o r ( )
         try :
               c u r . e x e c u t e ( ’ s e l e c t ∗ from t where k e y=? ’ ,
               f o r row i n c u r . f e t c h o n e ( ) :
                       dosomthing . . .
               conn . commit ( )
         except e :
               logger . log ( 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




             .   .   .   .   .   .
谢谢大家!




        再见!




              .   .   .   .   .   .

Weitere ähnliche Inhalte

Mehr von March Liu

Jaskell Core Parsec
Jaskell Core ParsecJaskell Core Parsec
Jaskell Core ParsecMarch Liu
 
轻量级文本工具集
轻量级文本工具集轻量级文本工具集
轻量级文本工具集March Liu
 
奇点与未来
奇点与未来奇点与未来
奇点与未来March Liu
 
尼尔盖曼的美国众神
尼尔盖曼的美国众神尼尔盖曼的美国众神
尼尔盖曼的美国众神March Liu
 
创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务March Liu
 
It工程师的职业成长
It工程师的职业成长It工程师的职业成长
It工程师的职业成长March Liu
 
Xcode tutorial
Xcode tutorialXcode tutorial
Xcode tutorialMarch Liu
 
Socrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemySocrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemyMarch Liu
 
PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性March Liu
 
Emacs Introduction
Emacs IntroductionEmacs Introduction
Emacs IntroductionMarch Liu
 
软件开发工程化的个人体验
软件开发工程化的个人体验软件开发工程化的个人体验
软件开发工程化的个人体验March Liu
 
Python速成指南
Python速成指南Python速成指南
Python速成指南March Liu
 
Python 数据库技术
Python 数据库技术Python 数据库技术
Python 数据库技术March Liu
 
PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践March Liu
 
基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案March Liu
 
3 Python开发风格与建议
3 Python开发风格与建议3 Python开发风格与建议
3 Python开发风格与建议March Liu
 
Postgre sql intro 0
Postgre sql intro 0Postgre sql intro 0
Postgre sql intro 0March Liu
 
Perl 6 news at 2010-06
Perl 6 news at 2010-06Perl 6 news at 2010-06
Perl 6 news at 2010-06March Liu
 

Mehr von March Liu (19)

Jaskell Core Parsec
Jaskell Core ParsecJaskell Core Parsec
Jaskell Core Parsec
 
轻量级文本工具集
轻量级文本工具集轻量级文本工具集
轻量级文本工具集
 
奇点与未来
奇点与未来奇点与未来
奇点与未来
 
尼尔盖曼的美国众神
尼尔盖曼的美国众神尼尔盖曼的美国众神
尼尔盖曼的美国众神
 
创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务创业项目中常见的技术和管理债务
创业项目中常见的技术和管理债务
 
It工程师的职业成长
It工程师的职业成长It工程师的职业成长
It工程师的职业成长
 
Xcode tutorial
Xcode tutorialXcode tutorial
Xcode tutorial
 
Socrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemySocrates Used PostgreSQL and SQLAlchemy
Socrates Used PostgreSQL and SQLAlchemy
 
PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性PostgreSQL 9 1 新特性
PostgreSQL 9 1 新特性
 
Emacs Introduction
Emacs IntroductionEmacs Introduction
Emacs Introduction
 
软件开发工程化的个人体验
软件开发工程化的个人体验软件开发工程化的个人体验
软件开发工程化的个人体验
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
Python 数据库技术
Python 数据库技术Python 数据库技术
Python 数据库技术
 
PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践PostgreSQL 9 的 standby 集群实践
PostgreSQL 9 的 standby 集群实践
 
基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案基于 PostgreSQL 的关系型数据库方案
基于 PostgreSQL 的关系型数据库方案
 
About Me
About MeAbout Me
About Me
 
3 Python开发风格与建议
3 Python开发风格与建议3 Python开发风格与建议
3 Python开发风格与建议
 
Postgre sql intro 0
Postgre sql intro 0Postgre sql intro 0
Postgre sql intro 0
 
Perl 6 news at 2010-06
Perl 6 news at 2010-06Perl 6 news at 2010-06
Perl 6 news at 2010-06
 

Python 数据库技术讲座(二)