数据库原理与应用 第 17 章 · 第五节
课程第 17 章第五节 四位同学照抄跑不通拼成变量查回来删一行少了一个改一行 版式
第 17 章 使用 Python 连接 MySQL 数据库 · 第五节

增删改:一个模板三个动词

本 节 知 识 点
  1. 47示例 1 要插的四行
  2. 48实现代码里的两个坑
  3. 49同义改写的四个 sql
  4. 50插完用 SELECT 看一眼
  5. 51示例 2:删掉 s12
  6. 52删完再查,李玉不在了
  7. 53示例 3:改专业
47
第 17 章 · 第五节

示例 1 要插的四行

王天一、苏红霞、林勇、李玉,学号 s9 到 s12。

第 47 页课件

重 点

这张表是标准答案,后面代码里的值要跟它对得上。

知道更多

课件第 48、49 页把 s12 写成物联网、信息学院,与这张表和第 50 页都不一样。

想一想

四条 INSERT,中间有一条失败该怎么办?

48
第 17 章 · 第五节

实现代码里的两个坑

第一行 import 印成了大写,close 缩进在 except 里。

第 48 页课件

试一试这一条 INSERT 走到哪一步才算数

这一版代码
    这一刻去查自己这条连接另开一条连接

    重 点

    课件第一行印的是 Import,大写 I 不是关键字,照抄是 SyntaxError。

    知道更多

    db.close() 缩进在 except 里,四条都成功时反而不关连接。

    上机做

    上机三第 2 题 插四位同学

    想一想

    把 commit 挪到 try 外面会怎样?

    49
    第 17 章 · 第五节

    同义改写的四个 sql

    先把 SQL 存进变量,再交给 execute,效果一样。

    第 49 页课件

    重 点

    这一版把表名写成了大写 S,Linux 上的 MySQL 认大小写,会报 1146。

    知道更多

    sql4 的年龄写成 22,第 47 页和第 50 页的表里都是 21。

    想一想

    Windows 上照抄这一版会不会报错?

    50
    第 17 章 · 第五节

    插完用 SELECT 看一眼

    十二行,s9 到 s12 都在里面。

    第 50 页课件

    试一试第二次跑这段代码,屏幕上是什么

    插两条,第二条主码重复
    屏幕上打出来的

    重 点

    课件那句注意说的是:再跑一遍不报错,也插不进去。

    知道更多

    原因是 except 后面只有 rollback 没有 print,1062 被整个吞掉了。

    上机做

    上机三第 4 题 看错怎么被吞

    想一想

    怎么改一个地方就能让它把错说出来?

    51
    第 17 章 · 第五节

    示例 2:删掉 s12

    DELETE 也是改数据,一样要 commit。

    第 51 页课件

    重 点

    课件这一页的标题写的是改专业,代码却是 DELETE,标题串了。

    知道更多

    文件名这里叫 delete_s_05.py,下一页又说是 delete_s_04.py,两处对不上。

    上机做

    上机三第 6 题 删一行

    想一想

    删一个本来就不存在的学号,会报错吗?

    52
    第 17 章 · 第五节

    删完再查,李玉不在了

    十一行,s12 那一行没了。

    第 52 页课件

    重 点

    一行都没删掉时 rowcount 是 0,一个错也不报,得自己看这个数。

    练一练

    DELETE 跑完 rowcount 是 0,最合理的判断是?
    1. A语句写错了
    2. B一行都没命中
    3. C连接断了
    4. D忘了 commit
    答案 B

    语句写错会抛异常,rowcount 是 0 只说明 WHERE 一行也没匹配上。

    想一想

    rowcount 是 0,该当成成功还是失败?

    53
    第 17 章 · 第五节

    示例 3:改专业

    这一页的 sql 那一行少了一个右引号。

    第 53 页课件

    试一试rowcount 数的到底是谁

    刚跑完哪一句
    -1

    重 点

    少一个右引号,照抄是 SyntaxError,还没连数据库就被拦下了。

    知道更多

    命中一行但值没变时,rowcount 给的是 0,跟第 16 章那句 Changed 是同一个数。

    上机做

    上机三第 7 题 改一行

    想一想

    命中了却没改动,算改成功了吗?

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