数据库原理与应用 第 17 章 · 第二节
课程第 17 章第二节 第二步四小节访问工具一套规矩统一接口管连接的管语句的管出错的六个子类访问流程五步流程一张图 版式
第 17 章 使用 Python 连接 MySQL 数据库 · 第二节

Python DB API:三个对象一套规矩

本 节 知 识 点
  1. 13Python 怎么访问数据库
  2. 14工具、流程、连接、环境
  3. 15先弄清有哪几样东西
  4. 16Python DB API 是什么
  5. 17三个对象各管一摊
  6. 18Connection 的四个方法
  7. 19Cursor 的七个方法
  8. 20五类异常的头几个
  9. 21按错在哪一层分的
  10. 22把三个对象串成一条线
  11. 23导、连、游、执、关
  12. 24流程图上的四个方框
13
第 17 章 · 第二节

Python 怎么访问数据库

这一节讲接口,不讲具体某一种数据库。

第 13 页课件

重 点

接口是规矩,驱动是实现,先认规矩再认驱动。

打个比方

像插座的国标:谁家做的插头都能插进去。

14
第 17 章 · 第二节

工具、流程、连接、环境

前两节是概念,后两节开始动手。

第 14 页课件

知道更多

这一节看着零碎,其实只讲三个对象加一条流程。

重 点

三个对象加一条五步流程,这一节的全部内容就是这两样。

15
第 17 章 · 第二节

先弄清有哪几样东西

Connection、Cursor、Exceptions,一共就三样。

第 15 页课件

记牢它三样

  1. Connection 管连接
  2. Cursor 管语句
  3. Exceptions 管出错

重 点

三样东西对应三张表,接下来四页就是把它们讲一遍。

16
第 17 章 · 第二节

Python DB API 是什么

它规定了访问数据库的统一写法,不管底下是哪种库。

第 16 页课件

关键术语

DB APIDatabase API
Python 访问数据库的统一接口规范
驱动driver
把规范落到某一种数据库上的那个包

重 点

换成 Oracle 或 SQL Server,代码的骨架几乎一个字不改。

练一练

换成 Oracle 之后,程序里要改的主要是哪一部分?
  1. Afetch 的写法
  2. B导入的包和连接参数
  3. Cfor 循环
  4. Dtry 的写法
答案 B

DB API 把接口统一了,换库主要换驱动包名和 connect 的参数。

想一想

为什么要先定规范,再让各家去实现?

17
第 17 章 · 第二节

三个对象各管一摊

上面是你的程序,中间是 DB API,下面是各种数据库。

第 17 页课件

试一试点一个对象,看它有什么方法

点一个对象
它有什么拿来做什么

重 点

所有的 SQL 都从 Cursor 出去,Connection 自己一句也不执行。

打个比方

Connection 是打通的那条电话线,Cursor 是拿起来说话的那个人。

18
第 17 章 · 第二节

Connection 的四个方法

cursor、commit、rollback、close。

第 18 页课件

分清楚四个方法

方法做什么
cursor()开一个游标
commit()提交这一笔
rollback()撤销这一笔
close()断开连接

重 点

四个里面 commit 最要紧,忘了它前面全白干。

想一想

close 之前没 commit,改动去哪儿了?

19
第 17 章 · 第二节

Cursor 的七个方法

execute 发出去,三个 fetch 取回来。

第 19 页课件

分清楚两类活儿

发出去取回来
executefetchone
executemanyfetchmany
rowcountfetchall

重 点

execute 只把 SQL 送过去,结果还在服务器那边等着你取。

上机做

上机二第 3 题 三件套跑一遍

练一练

关于 fetchone 和 fetchall,下列说法错误的是?
  1. Afetchone 给一个元组
  2. Bfetchall 给一个列表
  3. Cfetchall 一定比 fetchone 快
  4. D取空了不报错
答案 C

fetchall 把全部结果一次搬进内存,行多时反而更慢更占地方。

想一想

查询之后不 fetch,结果会自己出现吗?

20
第 17 章 · 第二节

五类异常的头几个

Warning 是警告,Error 是所有错误的祖宗。

第 20 页课件

关键术语

异常Exception
出错时抛出来的那个对象,except 接住的就是它
errnoerror number
MySQL 的错误号,1062、1064 都在这儿

重 点

接不准该接哪个就接 Exception,它是所有异常的祖宗。

21
第 17 章 · 第二节

按错在哪一层分的

从连不上到数据不合法,各归各的类。

第 21 页课件

分清楚常撞的三个

类名什么时候
ProgrammingSQL 写错
Integrity主码外码
Data值不合法

知道更多

分类的依据是 SQLSTATE:42 开头归 Programming,23 开头归 Integrity。

想一想

主码重复的 1062 属于哪一类?

22
第 17 章 · 第二节

把三个对象串成一条线

接下来这一页是全章最该背下来的。

第 22 页课件

重 点

五步流程,考试里出现的次数比任何一个方法名都多。

打个比方

像打电话:先有号码本,再拨通,再开口,说完挂断。

23
第 17 章 · 第二节

导、连、游、执、关

课件这一页把后三条重复了,还漏了最后一步。

第 23 页课件

试一试对着看:课件那一版少了什么

看哪一版

    重 点

    课件这一页只写了四步,后三条与前面重复,关闭那一步没提。

    记牢它五步口诀

    1. 导、连、游、执、关
    2. 改了数据再加一句 commit

    练一练

    Python 访问数据库五步的正确顺序是?
    1. A创建游标 → 建立连接 → 导入接口 → 执行 → 关闭
    2. B导入接口 → 建立连接 → 创建游标 → 执行 → 关闭
    3. C建立连接 → 导入接口 → 创建游标 → 执行 → 关闭
    4. D导入接口 → 创建游标 → 建立连接 → 执行 → 关闭
    答案 B

    先有包才用得上 connect,先有连接才开得出游标,最后才发 SQL。

    上机做

    上机二第 1 题 五步走一遍

    想一想

    改了数据的话,哪两步之间还要加一句?

    24
    第 17 章 · 第二节

    流程图上的四个方框

    创建、获取、执行、关闭,跟五步一一对得上。

    第 24 页课件

    重 点

    图上关闭画了两个框:先关 Cursor,再关 Connection。

    知道更多

    顺序反过来也不报错,但养成先关小的再关大的习惯不吃亏。

    保山学院·人工智能教研室·曹鼎鼎