Python 怎么访问数据库
这一节讲接口,不讲具体某一种数据库。

重 点
接口是规矩,驱动是实现,先认规矩再认驱动。
打个比方
像插座的国标:谁家做的插头都能插进去。
这一节讲接口,不讲具体某一种数据库。

接口是规矩,驱动是实现,先认规矩再认驱动。
像插座的国标:谁家做的插头都能插进去。
前两节是概念,后两节开始动手。

这一节看着零碎,其实只讲三个对象加一条流程。
三个对象加一条五步流程,这一节的全部内容就是这两样。
Connection、Cursor、Exceptions,一共就三样。

三样东西对应三张表,接下来四页就是把它们讲一遍。
它规定了访问数据库的统一写法,不管底下是哪种库。

换成 Oracle 或 SQL Server,代码的骨架几乎一个字不改。
DB API 把接口统一了,换库主要换驱动包名和 connect 的参数。
为什么要先定规范,再让各家去实现?
上面是你的程序,中间是 DB API,下面是各种数据库。

| 它有什么 | 拿来做什么 |
|---|
所有的 SQL 都从 Cursor 出去,Connection 自己一句也不执行。
Connection 是打通的那条电话线,Cursor 是拿起来说话的那个人。
cursor、commit、rollback、close。

| 方法 | 做什么 |
|---|---|
| cursor() | 开一个游标 |
| commit() | 提交这一笔 |
| rollback() | 撤销这一笔 |
| close() | 断开连接 |
四个里面 commit 最要紧,忘了它前面全白干。
close 之前没 commit,改动去哪儿了?
execute 发出去,三个 fetch 取回来。

| 发出去 | 取回来 |
|---|---|
| execute | fetchone |
| executemany | fetchmany |
| rowcount | fetchall |
execute 只把 SQL 送过去,结果还在服务器那边等着你取。
fetchall 把全部结果一次搬进内存,行多时反而更慢更占地方。
查询之后不 fetch,结果会自己出现吗?
Warning 是警告,Error 是所有错误的祖宗。

接不准该接哪个就接 Exception,它是所有异常的祖宗。
从连不上到数据不合法,各归各的类。

| 类名 | 什么时候 |
|---|---|
| Programming | SQL 写错 |
| Integrity | 主码外码 |
| Data | 值不合法 |
分类的依据是 SQLSTATE:42 开头归 Programming,23 开头归 Integrity。
主码重复的 1062 属于哪一类?
接下来这一页是全章最该背下来的。

五步流程,考试里出现的次数比任何一个方法名都多。
像打电话:先有号码本,再拨通,再开口,说完挂断。
课件这一页把后三条重复了,还漏了最后一步。

课件这一页只写了四步,后三条与前面重复,关闭那一步没提。
先有包才用得上 connect,先有连接才开得出游标,最后才发 SQL。
改了数据的话,哪两步之间还要加一句?
创建、获取、执行、关闭,跟五步一一对得上。

图上关闭画了两个框:先关 Cursor,再关 Connection。
顺序反过来也不报错,但养成先关小的再关大的习惯不吃亏。