一.实验目的
(1)熟悉使用Python操作MySQL数据库的方法。
二. 实验平台
(1)操作系统:Windows7及以上;
(2)MySQL版本:5.5及以上;
(3)Python版本:3.7及以上。
三. 实验步骤
在Windows系统中安装好MySQL5.5及以上和Python3.7及以上,然后再完成下面题目中的各项操作。
现有以下三个表格:
表1 学生表:student(主码为Sno)
学号(Sno) 姓名(Sname) 性别(Ssex) 年龄(Sage) 所在系别(Sdept)
10001 Jack 男 21 CS
10002 Rose 女 20 SE
10003 Michael 男 21 IS
10004 Hepburn 女 19 CS
10005 Lisa 女 20 SE
表2 课程表:course(主码为Cno)
课程号(Cno) 课程名(Cname) 学分(Credit)
1 DataBase 4
2 DataStructure 4
3 Algorithms 3
4 OperatingSystems 5
5 ComputerNetwork 4
表3 选课表:sc(主码为Sno,Cno)
学号(Sno) 课程号(Cno) 成绩(Grade)
10002 3 86
10001 2 90
10002 4 70
10003 1 85
10004 2 77
10005 3 88
10001 5 91
10002 2 79
10003 2 83
10004 3 67
通过编程实现以下题目:
(1)查询学号为10003学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
(2)查询每位学生成绩大于86的课程,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
(3)由于培养计划改,现需将课程号为00001、课程名为DataBase的学分改为5学分。
(4)将学号为10005的学生, OperatingSystems(00004)成绩为73分这一记录写入选课表中。
(5)将学号为10002的学生从这三个表中删除。
【参考答案】
为了节省建表时间,在此直接将建表的脚本文件附上,只需要在Mysql可视化软件Navicat上连接Mysql后,创建school数据库,右击school数据库,点击运行SQL文件,找到脚本文件位置运行。最后在空白位置右击刷新,即可在school数据库中创建以上三个表格及数据。
如果刷新之后还是无法显示题中的三个表格,关闭数据库连接后再连接即可。
(1)查询学号为10003学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
import pymysql.cursors
连接数据库
connect = pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='root',
db='school',
charset='utf8'
)
获取游标
cursor = connect.cursor()
设置sql语句
sql = "SELECT student.Sno,Sname,Sdept,course.Cno,Cname,Grade " \
"FROM student,course,sc " \
"WHERE student.Sno = sc.Sno AND course.Cno = sc.Cno AND sc.Sno = '%s'"
设置数据
data = ('10003',)
执行sql语句
cursor.execute(sql % data)
sql="select student.Sno,Sname,Sdept,course.Cno,Cname,Grade from student,course,sc where student.Sno=sc.Sno and course.Cno=sc.Cno and sc.sno='10003'"
cursor.execute(sql)
获取数据
print("共有%s条记录" % cursor.rowcount)
for row in cursor.fetchall():
print("学号:%s\t姓名:%s\t系别:%s\t课程号:%s\t课程名:%s\t成绩:%d" % row)
关闭数据库连接
cursor.close()
connect.close()
(2)查询每位学生成绩大于86的课程,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
import pymysql.cursors
连接数据库
connect = pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='root',
db='school',
charset='utf8'
)
获取游标
cursor = connect.cursor()
设置sql语句
sql = "SELECT student.Sno,Sname,Sdept,course.Cno,Cname,Grade " \
"FROM student,course,sc " \
"WHERE student.Sno = sc.Sno AND course.Cno = sc.Cno AND Grade > %d"
设置数据
data = (86, )
执行sql语句
cursor.execute(sql % data)
获取数据
print("共有%s条记录" % cursor.rowcount)
for row in cursor.fetchall():
print("学号:%s\t姓名:%s\t系别:%s\t课程号:%s\t课程名:%s\t成绩:%d" % row)
关闭数据库连接
cursor.close()
connect.close()
(3)由于培养计划改,现需将课程号为1、课程名为DataBase的学分改为5学分。
import pymysql.cursors
连接数据库
connect = pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='root',
db='school',
charset='utf8'
)
获取游标
cursor = connect.cursor()
设置sql语句
sql = "UPDATE course SET Credit = %d WHERE Cno = %d"
设置数据
data = (5, 1)
执行sql语句,并获取执行结果
result = cursor.execute(sql % data)
提交事务
connect.commit()
查看执行结果
print(result)
关闭数据库连接
cursor.close()
connect.close()
(4)将学号为10005的学生, OperatingSystems(4)成绩为73分这一记录写入选课表中。
import pymysql.cursors
连接数据库
connect = pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='root',
db='school',
charset='utf8'
)
获取游标
cursor = connect.cursor()
设置sql语句
sql = "INSERT INTO sc(Sno,Cno,Grade) VALUES(%d,%d,%d)"
设置数据
data = (10005, 4, 73)
执行sql语句,并获取执行结果
result = cursor.execute(sql % data)
connect.commit()
输出执行结果
print(result)
关闭数据库连接
cursor.close()
connect.close()
(5)将学号为10002的学生从这三个表中删除。
import pymysql.cursors
连接数据库
connect = pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='root',
db='school',
charset='utf8'
)
获取游标
cursor = connect.cursor()
设置sql语句
sql = "DELETE FROM student WHERE Sno = %d"
设置数据
data = (10002,)
执行sql语句,并获取执行结果
result = cursor.execute(sql % data)
connect.commit()
输出执行结果
print(result)
关闭数据库连接
cursor.close()
connect.close()
四.实验报告
《大数据采集》实验报告
班级: 姓名: 学号: 日期:
实验环境:
实验内容与目的:
具体过程(备注:不必写完整代码,写核心程序即可,每步结果截图保留):(分值80分,每大步16分)。
(1)查询学号为10003学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
(2)查询每位学生成绩大于86的课程,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
(3)由于培养计划改,现需将课程号为1、课程名为DataBase的学分改为5学分。
(4)将学号为10005的学生, OperatingSystems(4)成绩为73分这一记录写入选课表中。
(5)将学号为10002的学生从这三个表中删除。
实验总结:(如可写出现的问题和解决方案等内容)(分值20分)。
实验总结: