数据库原理与应用 第 17 章 · 第三节
课程 › 第 17 章 › 第三节 插入删除与修改查询与事务小结 版式
第 17 章 使用 Python 连接 MySQL 数据库 · 第三节

用 Python 操作数据

插入、删除、修改和查询数据,commit 与 rollback
本 节 知 识 点
  1. 08插入数据
  2. 09删除与修改数据
  3. 10查询数据与执行事务
  4. 11本章小结
08
第 17 章 · 第三节 · 课件第 42、43、45、46、47、48、49、50 页合并重做

插入数据

执行 INSERT,全部成功才 commit。

17.3 用 Python 操作数据课件第 42、43、45 至 50 页合并

插入数据

示例 1:把王天一、苏红霞、林勇、李玉四位同学的信息插入学生表 s。
snosnsexagemajdept
s9王天一女18计算机信息学院
s10苏红霞女20信息信息学院
s11林勇男19信息信息学院
s12李玉女21自动化工学院
sqls = [
  "INSERT INTO s VALUES ('s9', …)",
  "INSERT INTO s VALUES ('s10', …)",
  …
]
try:
    for sql in sqls:
        cursor.execute(sql)
    db.commit()
except mysql.connector.Error:
    db.rollback()
finally:
    cursor.close()
    db.close()
  • 四条语句在同一个事务中,全部成功才提交
  • 某一条出错,rollback 撤销前面已经执行的语句
  • 有一个学号已经存在时报错 1062,四个人都不会插入
  • finally 中的语句不论是否出错都执行,关闭游标和连接写在这里
09
第 17 章 · 第三节 · 课件第 51、52、53 页合并重做

删除与修改数据

写法与插入相同,只是 SQL 语句不同。

17.3 用 Python 操作数据课件第 51 至 53 页合并

删除与修改数据

示例 2 删除 s12
sql = "DELETE FROM s WHERE sno = 's12'"
try:
    cursor.execute(sql)
    db.commit()
except mysql.connector.Error:
    db.rollback()
示例 3 修改林欣怡的专业
sql = ("UPDATE s SET maj = '计算机' "
       "WHERE sn = '林欣怡'")
try:
    cursor.execute(sql)
    db.commit()
except mysql.connector.Error:
    db.rollback()
  • 删除和修改与插入的写法相同,只是 SQL 语句不同。连接和关闭的代码与上一页相同
  • 修改后用 SELECT * FROM s WHERE sn = '林欣怡' 查询,专业变为计算机

想一想

删除一个不存在的学号,程序会报错吗?

实 验

实验 1-6 删除和修改

10
第 17 章 · 第三节 · 课件第 54、55、56、57、58、59 页合并重做

查询数据与执行事务

查询用 fetch 取结果,修改后要 commit。

17.3 用 Python 操作数据课件第 54 至 59 页合并

查询数据与执行事务

示例 4 年龄不小于 20 的学生
sql = "SELECT * FROM s WHERE age >= 20"
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
    print(row)
  • fetchall 取出所有行,每一行是一个元组。fetchone 只取一行
  • 查询不修改数据,不用 commit
  • 条件中的值来自用户输入时,SQL 中写成 %s,值作为 execute 的第二个参数传入
Python 中处理事务
方法作用
commit()提交事务,修改写入数据库
rollback()撤销事务中还没有提交的修改
  • mysql.connector 默认不自动提交,插入、删除、修改之后都要 commit
  • 不提交就关闭连接,修改被撤销
  • 事务的四个特性见第 9 章

试一试提交、不提交与回滚

插入 s13 以后,三种结束方式
结束
重新连接后查询 s13

实 验

实验 1-5 出错时回滚

11
第 17 章 · 第三节 · 课件第 60 页

本章小结

访问数据库的流程,环境搭建,增删改查和事务。

课件第 60 页

练一练

用 Python 插入数据后没有执行 commit 就关闭了连接,结果是什么?
  1. A数据已经保存
  2. B数据没有保存
  3. C程序报错,无法关闭
答案 B

mysql.connector 默认不自动提交,没有提交的修改在关闭连接时被撤销。

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