内容正文:
6.5数据表的操作
程序设计基础Python
同步精品课堂
高教版
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学目标
一
1. 认识数据表操作的核心SQL语句:SELECT、UPDATE、DELETE、ALTER、DROP;
2. 理解Python操作数据表的基本流程:“连接数据库→创建游标→执行SQL→处理结果→关闭资源”;
3. 知道“SELECT带WHERE条件”“UPDATE需要commit()”的关键规则。
教学重难点
二
(一)重点
1. Python操作数据表的基础流程;
2. SELECT、UPDATE、DELETE的核心代码格式。
(二)难点
1. 理解“commit()是‘保存修改’、fetchone()是‘取一条数据’”的作用;
2. 掌握“SELECT * FROM 表名 WHERE 条件”的语句格式,能写出“查询女生信息”的SQL语句;
3. 区分“查询操作无需commit(),修改/删除操作必须commit()”的差异。
“如果要把这些数据存在电脑里,怎么实现‘结构化存储’?”
导入新课
三
学号 姓名 性别 跑50米 立定跳远 坐位体前屈
202001001 柴思* 女 7.9 196 21
202001002 李雪* 女 7.2 196 20
202001003 方茹* 女 9.6 164 7
202001004 罗伟* 男 7.4 243 16
202001005 余珍* 女 8.1 198 13
202001006 张莹* 女 7.8 198 18
202001007 周晨* 男 7.1 243 14
202001008 王晨* 男 7.4 222 9
学生体能测试表
“如何快速找出所有男生的名字?”
“如果‘王晨*’改名叫‘张晨*’,怎么在表中修改?”
“如果‘李雪*’转学了,怎么从表中删掉他的信息?”
今天我们用 Python 代码完成这些操作,让‘找、改、删’信息变得更高效”
新知讲授
四
一、数据表的操作命令
Python的sqlite3模块通过调用SQL语句进行数据表的操作。
操作类型 操作命令 描述
数据查询 SELECT 查询满足条件的数据记录
数据定义 CREATE 创建数据库表
ALTER 修改数据表结构
DROP 删除数据库表
数据操纵 INSERT 添加数据记录
DELETE 删除数据记录
UPDATE 更新数据记录
数据表的操作
新知讲授
四
二、数据查询
SELECT <查询项> from <数据表名>
[where <条件>]
[group by <分组关键字> having <条件>]
[order by <排序关键字>]
SQL-SELECT语句格式如下:
SQLite3中调用SQL-SELECT语句可以实现对数据表数据的查询。
新知讲授
四
二、数据查询
在sqlite3中调用SQL-SELECT语句时,会应用游标对象方法程序。
方法程序 功能描述
execute() 调用SQL语句
executemany() 多次调用SQL语句
fetchone() 查询数据表结果的一条记录
fetchmany() 查询数据表结果的多条记录
fetchall() 查询数据表结果的全部记录
游标对象的常用方法程序
新知讲授
四
二、数据查询
SELECT <查询项> from <数据表名>
SQL-SELECT语句可以从数据表中查询指定的数据记录。
这里的<查询项>可以是<列名>,也可以是关于<列名>的表达式。
新知讲授
四
二、数据查询
例如:应用SQL-SELECT语句查询数据库“student.db”中数据表stu的学号列和姓名列。
01 import sqlite3
02 st=sqlite3.connect('student.db')
03 stu=st.cursor()
04 s=stu.execute('select 学号,姓名 from stud')
05 r=stu.fetchone()
06 print(r)
07 r=stu.fetchone()
08 print(r)
09 stu.close()
10 st.close()
注意:能打印出数据的前提是你要创建student.db数据库,并且student.db里面有数据。
新知讲授
四
二、数据查询
注意:能打印出数据的前提是你要创建student.db数据库,并且student.db里面有数据。
学号 姓名 性别 跑50米 立定跳远 坐位体前屈
202001003 罗伟* 男 7.4 243 16
202001004 余珍* 女 8.1 198 13
202001005 张莹* 女 7.8 198 18
202001006 周晨* 男 7.1 243 14
202001007 王晨* 男 7.4 222 9
新知讲授
四
二、数据查询
例如:应用SQL-SELECT语句查询数据库“student.db”中数据表stu的学号列和姓名列。
01 import sqlite3
02 st=sqlite3.connect('student.db')
03 stu=st.cursor()
04 s=stu.execute('select * from stud')
05 r=stu.fetchmany(2)
06 print(r)
07 stu.close()
08 st.close()
其中若查找所有列的数据,则<查询项>可以用“*”号表示。
新知讲授
四
二、数据查询
01 import sqlite3
02 st=sqlite3.connect('student.db')
03 stu=st.cursor()
04 s=stu.execute('select 学号,姓名 \
from stud where 性别=="男"')
05 r=stu.fetchone()
06 print(r)
07 r=stu.fetchone()
08 print(r)
09 stu.close()
10 st.close()
例如:应用SQL-SELECT语句查询数据库“student.db”数据表stu中性别为“男”的学号列和姓名列。
SQL-SELECT语句应用WHERE子句可以从数据表中按指定条件查询满足条件的数据记录。
新知讲授
四
二、数据查询
import sqlite3
st = sqlite3.connect("student.db")
stu = st.cursor()
# 执行SQL(group by 性别,会返回2条结果:女、男)
stu.execute("select 性别,AVG(立定跳远) from stud group by 性别")
# 第一次取:女
r1 = stu.fetchone()
print("女生平均立定跳远:", r1)
# 第二次取:男
r2 = stu.fetchone()
print("男生平均立定跳远:", r2)
stu.close()
st.close()
例如:应用SQL-SELECT语句性别为关键字分组查询数据库“student.db”中数据表stu的性别列和立定跳远列(平均值)。
SQL-SELECT语句应用可以GROUP BY子名从数据表中按指定分组关键字进行分组查询数据记录。
AVG()为求平均值函数,类似的函数有求和SUM()、计数COUNT()、最大值MAX()和最小值MIN()等。
新知讲授
四
二、数据查询(代码难理解地方讲解:课本代码纠错)
import sqlite3
st = sqlite3.connect("student.db")
stu = st.cursor()
# 执行SQL(group by 性别,会返回2条结果:女、男)
stu.execute("select 性别,AVG(立定跳远) from stud group by 性别")
# 第一次取:女
r1 = stu.fetchone()
print("女生平均立定跳远:", r1)
# 第二次取:男
r2 = stu.fetchone()
print("男生平均立定跳远:", r2)
stu.close()
st.close()
课本代码
import sqlite3
st = sqlite3.connect("student.db")
stu = st.cursor()
s = stu.execute("select 性别,AVG(立定跳远) from stud group by 性别")
r = stu.fetchone()
print(r)
stu.fetchone()
print(r)
stu.close()
st.close()
会发现打印的之后女生的数据???
新知讲授
四
二、数据查询(代码难理解地方讲解:课本代码纠错)
stu.execute("select 性别,AVG(立定跳远) from stud group by 性别")
# 第一次取:女
r1 = stu.fetchone()
print("女生平均立定跳远:", r1)
# 第二次取:男
r2 = stu.fetchone()
print("男生平均立定跳远:", r2)
课本代码
s = stu.execute("select 性别,AVG(立定跳远) from stud group by 性别")
r = stu.fetchone()
print(r)
stu.fetchone()
print(r)
这句代码相当于数据库返回了两个‘筐’,一个写着男性数据,一个写着女性数据。
这句代码相当于数据库返回了两个‘筐’,中拿了一个筐,放进了r1这个篮子里。
这句代码相当于数据库返回了两个‘筐’,中又拿了一个筐,放进了r2这个篮子里。
这句代码相当于数据库返回了两个‘筐’,中拿了一个筐,没放进篮子里,扔了,所以无法打印r,思考:课本代码如何更改,让它变正确?。
新知讲授
四
二、数据查询
01 import sqlite3
02 st=sqlite3.connect('student.db')
03 stu=st.cursor()
04 s=stu.execute('select 学号,姓名\
from stud order by 姓名 ASC')
05 r=stu.fetchall()
06 print(r)
07 stu.close()
08 st.close()
例如:应用SQL-SELECT语句查询数据库“student.db”中数据表stu的学号列和姓名列,查询结果以姓名为关键字进行升序排列。
SQL-SELECT语句应用可以GROUP BY子名从数据表中按指定分组关键字进行分组查询数据记录。<排序关键字>后加ASC表示为升序,加DESC为降序,默认为升序。
新知讲授
四
三、数据定义
ALTER TABLE <数据表名>ADD COLUMN <列名> <数据类型>
SQLite3中调用SQL-ALTER语句可以实现对数据表结构的修改,即添加数据表列。SQLite3不支持SQL-ALTER语句的修改和删除数据表列。
新知讲授
四
三、数据定义
应用SQL-ALTER语句修改数据库“xsda.db”中数据表“学生信息表(xsxx)”的表结构。
01 import sqlite3
02 xs=sqlite3.connect('xsda.db')
03 xscur=xs.cursor()
04 sql1='alter table xsxx add \
column 手机号码 TEXT'
05 s=xscur.execute(sql1) #添加列“手机号码”
06 xscur.close()
07 xs.close()
注意课本代码184页有两处错误,请根据PPT代码进行修正,并且指明原因。
新知讲授
四
三、数据定义
DROP TABLE <数据表名>
SQLite3中调用SQL-DROP语句可以实现对数据表删除,SQL-DROP语句的格式如下:
新知讲授
四
三、数据定义
例如:应用SQL-DROP语句删除数据库“xsda.db”中数据表“学生信息表(xsxx)”。
01 import sqlite3
02 xs=sqlite3.connect('xsda.db')
03 xscur=xs.cursor()
04 sql2='drop table xsxx'
05 s=xscur.execute(sql2) #删除数据表xsxx
06 xscur.close()
07 xs.close()
注意课本代码184页有两处错误,请根据PPT代码进行修正,并且指明原因。
新知讲授
四
四、数据操纵
例如:应用SQL-UPDATE语句更新数据库“student.db”中数据表stu的数据。
01 import sqlite3
02 st=sqlite3.connect('student.db')
03 stu=st.cursor()
04 stu.execute('update stud set 姓名="王玉*" \
where 学号="202001005"')
05 stu.execute('select 学号,姓名 from stud \
where 学号="202001005"')
06 r=stu.fetchall()
07 print(r)
08 st.commit()
09 stu.close()
10 st.close()
新知讲授
四
四、数据操纵
UPDATE <数据表名>
SET <列名1>=<表达式1>,<列名2>=<表达式2>,......
[WHERE <条件> ]
SQLite3中调用SQL-UPDATE语句可以实现对数据表记录的修改,SQL-UPDATE语句的格式如下:
新知讲授
四
四、数据操纵
例如:应用SQL-UPDATE语句更新数据库“student.db”中数据表stu的数据。
01 import sqlite3
02 st=sqlite3.connect('student.db')
03 stu=st.cursor()
04 stu.execute('update stud set 姓名="王玉*" \
where 学号="202001005"')
05 stu.execute('select 学号,姓名 from stud \
where 学号="202001005"')
06 r=stu.fetchall()
07 print(r)
08 st.commit()
09 stu.close()
10 st.close()
新知讲授
四
四、数据操纵
DELETE FROM <数据表名> [WHERE <条件> ]
SQLite3中调用SQL-DELETE语句可以实现对数据表记录的删除,SQL-DELETE语句的格式如下:
新知讲授
四
四、数据操纵
例如:应用SQL-DELETE语句删除数据库“student.db”中数据表stu的数据。
01 import sqlite3
02 st=sqlite3.connect('student.db')
03 stu=st.cursor()
04 stu.execute('delete from stud \
05 where 学号="202001005"')
06 stu.execute('select 学号,姓名 from stud')
07 r=stu.fetchall()
08 print(r)
09 st.commit()
10 stu.close()
11 st.close()
新知讲授
四
四、数据操纵
【例】编程完成下列查询:从键盘输入姓名,从数据库“student.db”数据表stu中查询该同学的数据记录。
01 import sqlite3 #导入SQLite3模块
02 st=sqlite3.connect('student.db') #定义数据库连接对象
03 stu=st.cursor() #定义游标对象
04 while True: #永真循环
05 name=input('请输入查询姓名:') #输入查询项
06 s='select * from stud where 姓名="{xm}"'.format(xm=name)\
#定义SQL-SELECT语句
07 stu.execute(s) #调用SQL语句
新知讲授
四
四、数据操纵
【例】编程完成下列查询:从键盘输入姓名,从数据库“student.db”数据表stu中查询该同学的数据记录。
08 a=stu.fetchall() #获取查询结果数据序列
09 print(a) #输出查询结果
10 yn=input('是否继续(y/n)') #继续查询确认
11 if yn.upper()=='Y': #继续查询
12 continue #重新循环
13 else: #终止查询
14 break #退出永真循环
15 stu.close() #定义游标对象
16 st.close() #关闭数据库连接对象
新知讲授
四
四、数据操纵(效果展示)
【例】编程完成下列查询:从键盘输入姓名,从数据库“student.db”数据表stu中查询该同学的数据记录。
师生互动
五
一:给学生发一份简化的“student.db”数据库(包含 stud 表的测试数据),让学生完成2个小任务:
① 用 SELECT 语句查询“学号202301003”的所有信息;
② 用 UPDATE 语句把“学号202301005”的姓名改成自己的名字,然后查询验证。
二:本节课本上代码有3段代码有错误,谁能找出,加积分。
随堂练习
1. 在sqlite3中,游标对象的 fetchone() 方法的作用是?
A. 查询数据表结果的全部记录
B. 查询数据表结果的一条记录
C. 查询数据表结果的多条记录
D. 执行SQL语句
【答案】B
【解析】 fetchone() 用于获取查询结果中的一条记录; fetchmany() 获取多条, fetchall() 获取全部, execute() 用于执行SQL语句。
六
随堂练习
2. 在SELECT语句中,若要查询数据表的所有列,应使用的符号是?
A. ?
B. *
C. %
D. #
【答案】B
【解析】“*”是SELECT语句中查询所有列的通配符,比如 SELECT * FROM stud 可获取表中所有列的数据。
六
随堂练习
3. 下列关于sqlite3中ALTER语句的描述,正确的是?
A. 可以删除数据表列
B. 可以添加数据表列
C. 可以修改数据表的名称
D. 可以删除整个数据表
【答案】B
【解析】sqlite3的ALTER语句支持添加列和修改列名,但不支持删除列;删除数据表用 DROP TABLE ,修改表名不是其常规功能。
六
随堂练习
4.在SELECT语句中,用于计算某列平均值的聚合函数是?
A. SUM()
B. COUNT()
C. AVG()
D. MAX()
【答案】C
【解析】 AVG() 用于计算列的平均值, SUM() 是求和, COUNT() 是计数, MAX() 是求最大值。
六
随堂练习
5.下列关于UPDATE语句的格式,正确的是?
A. UPDATE <数据表名> WHERE <条件> SET <列名>=<表达式>
B. UPDATE <数据表名> SET <列名>=<表达式> [WHERE <条件>]
C. UPDATE SET <列名>=<表达式> <数据表名> [WHERE <条件>]
D. UPDATE <列名>=<表达式> SET <数据表名> [WHERE <条件>]
【答案】B
【解析】UPDATE语句的正确格式是“UPDATE <数据表名> SET <列名>=<表达式> [WHERE <条件>]”,用于修改满足条件的记录。
六
随堂练习
6. 在sqlite3中,若DELETE语句省略WHERE子句,会产生的结果是?
A. 不删除任何记录
B. 删除数据表的第一条记录
C. 删除数据表的最后一条记录
D. 删除数据表的所有记录
【答案】D
【解析】DELETE语句省略WHERE子句时,会删除数据表中的所有记录;带WHERE子句则只删除满足条件的记录。
六
随堂练习
7.在SELECT语句的ORDER BY子句中,默认的排序方式是?
A. 降序(DESC)
B. 升序(ASC)
C. 随机排序
D. 无默认排序
【答案】B
【解析】ORDER BY子句默认按升序ASC排序,添加DESC关键字可改为降序。
六
随堂练习
8. 在sqlite3中,游标对象的 fetchall() 方法的作用是?
A. 执行多条SQL语句
B. 获取查询结果的一条记录
C. 获取查询结果的全部记录
D. 获取查询结果的指定数量记录
【答案】C
【解析】 fetchall() 用于获取查询结果的全部记录; executemany() 执行多条SQL语句, fetchone() 获取一条, fetchmany() 获取指定数量的多条。
六
课堂小结
八
谢谢
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
$