数据库原理与应用 第 17 章 · 上机三
课程第 17 章上机三 起手式插四位同学忘了提交错被吞了让它说话删一行改一行连续练习 版式
第 17 章 使用 Python 连接 MySQL 数据库 · 上机三

插入、删除、修改与那句 commit

课件第 47 到 53 页那三件事:改数据要 commit,出错要 rollback,错不能被吞掉。
已完成 0 / 7
本 次 上 机 题 目
  1. 01装驱动、进解释器、连上库
  2. 02课件示例 1 的四条 INSERT
  3. 03插一条,直接关,再进去查
  4. 04同一段再跑一遍,屏幕上什么都没有
  5. 05except Exception as e 才看得见 1062
  6. 06课件示例 2:删掉 s12
  7. 07课件示例 3:把林欣怡的专业改成计算机
  8. 插一条、改一条、删一条,全在一个 try 里
01
第 17 章 · 上机三

装驱动、进解释器、连上库

这一页要动数据,先把连接建起来。

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

这一页从头到尾只用这一条连接,最后一题才关掉。

知道更多

改数据的每一题都要 commit,查数据的一句都不用。

02
第 17 章 · 上机三

课件示例 1 的四条 INSERT

四条都进 try 里,全成才 commit。

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

四条 INSERT 加一句 commit,这才是课件那段代码在干的事。

知道更多

课件第 48 页的 db.close() 缩进在 except 里,跑通时反而不关连接。

想一想

把 commit 挪到 try 外面,出错时会怎样?

03
第 17 章 · 上机三

插一条,直接关,再进去查

全章最要命的一步:不报错,数据也没了。

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

rowcount 是 1,SELECT 却查不到,改动只到缓冲区为止。

记牢它记牢它

  1. 读不 commit
  2. 写必 commit
  3. 不提交白干

想一想

如果不 close 直接 exit(),结果会不会不一样?

04
第 17 章 · 上机三

同一段再跑一遍,屏幕上什么都没有

课件那种 except 后面没有 print,错就没了。

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

屏幕上一个字都没有,表里也一行没多,这是最难查的一种错。

知道更多

课件第 50 页那句注意说的就是这件事,只是没说错在哪儿。

想一想

怎么改一个字就能让它说话?

05
第 17 章 · 上机三

except Exception as e 才看得见 1062

多一个 as e 和一句 print,错误号自己就出来了。

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

1062 Duplicate entry,主码重复,这是第 5 章那个老朋友。

关键术语

异常对象Exception
出错时抛出来的那个东西,as e 把它接住
errnoerror number
MySQL 的错误号,1062 就在这里

知道更多

type(e).__name__ 是 IntegrityError,完整性约束这一类都归它。

06
第 17 章 · 上机三

课件示例 2:删掉 s12

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

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

第二次删同一行,rowcount 是 0,一个错也不报。

知道更多

课件第 51 页标题写的是「将姓名为林毅的 maj 改为计算机」,代码却是 DELETE。

想一想

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

07
第 17 章 · 上机三

课件示例 3:把林欣怡的专业改成计算机

先照课件原样敲一次,那一行少了个右引号。

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

第二次跑 rowcount 是 0,专业已经是计算机,没有可改的了。

知道更多

第 16 章那句 Rows matched: 1 Changed: 0,rowcount 拿的是后面那个数。

想一想

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

第 17 章 · 上机三

插一条、改一条、删一条,全在一个 try 里

三件事要么全成,要么一件不留。

Microsoft Windows [版本 10.0.18363.1256]
(c) 2019 Microsoft Corporation。保留所有权利。
终端停在 Windows 的命令提示符上。敲 python 进 >>>,敲 exit() 退回来,敲 mysql -u root -p123456 teaching 还能用 SQL 验一遍程序刚才干了什么。
mysql>

重 点

开头那两句先把 s30 清掉,这一题才能反复跑。

知道更多

第三句 DELETE 一行没命中,不算出错,所以三件事照样全部提交。

想一想

把第二句的 sno 改成 s31,最后表里还有 s30 吗?

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