装驱动、进解释器、连上库
这一页要动数据,先把连接建起来。
重 点
这一页从头到尾只用这一条连接,最后一题才关掉。
知道更多
改数据的每一题都要 commit,查数据的一句都不用。
这一页要动数据,先把连接建起来。
这一页从头到尾只用这一条连接,最后一题才关掉。
改数据的每一题都要 commit,查数据的一句都不用。
四条都进 try 里,全成才 commit。
四条 INSERT 加一句 commit,这才是课件那段代码在干的事。
课件第 48 页的 db.close() 缩进在 except 里,跑通时反而不关连接。
把 commit 挪到 try 外面,出错时会怎样?
全章最要命的一步:不报错,数据也没了。
rowcount 是 1,SELECT 却查不到,改动只到缓冲区为止。
如果不 close 直接 exit(),结果会不会不一样?
课件那种 except 后面没有 print,错就没了。
屏幕上一个字都没有,表里也一行没多,这是最难查的一种错。
课件第 50 页那句注意说的就是这件事,只是没说错在哪儿。
怎么改一个字就能让它说话?
多一个 as e 和一句 print,错误号自己就出来了。
1062 Duplicate entry,主码重复,这是第 5 章那个老朋友。
type(e).__name__ 是 IntegrityError,完整性约束这一类都归它。
DELETE 也是改数据,一样要 commit。
第二次删同一行,rowcount 是 0,一个错也不报。
课件第 51 页标题写的是「将姓名为林毅的 maj 改为计算机」,代码却是 DELETE。
rowcount 是 0 时,该当成成功还是失败?
先照课件原样敲一次,那一行少了个右引号。
第二次跑 rowcount 是 0,专业已经是计算机,没有可改的了。
第 16 章那句 Rows matched: 1 Changed: 0,rowcount 拿的是后面那个数。
命中了却没改动,算不算改成功?
三件事要么全成,要么一件不留。
开头那两句先把 s30 清掉,这一题才能反复跑。
第三句 DELETE 一行没命中,不算出错,所以三件事照样全部提交。
把第二句的 sno 改成 s31,最后表里还有 s30 吗?