基于Python的MySQL与HDFS操作实验报告:数据采集与预处理课程实践
实验一 熟悉MySQL和HDFS操作
一、实验目的
1. 熟悉使用python操作MySQL数据库的方法;
2. 熟悉使用HDFS操作使用Shell命令。
二、实验内容
1.使用Python操作MySQL数据库
在Windows系统中安装好MySQL8.0.23和Python3.8.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)
00001
DataBase
4
00002
DataStructure
4
00003
Algorithms
3
00004
OperatingSystems
5
00005
ComputerNetwork
4
表3 选课表:SC(主码为Sno,Cno)
学号(Sno)
课程号(Cno)
成绩(Grade)
10002
00003
86
10001
00002
90
10002
00004
70
10003
00001
85
10004
00002
77
10005
00003
88
10001
00005
91
10002
00002
79
10003
00002
83
10004
00003
67
通过编程实现以下题目:
- 查询学号为10002学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
- 查询每位学生成绩大于85的课程,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
- 由于培养计划改,现需将课程号为00001、课程名为DataBase的学分改为5学分。
- 将学号为10005的学生, OperatingSystems(00004)成绩为73分这一记录写入选课表中。
将学号为10003的学生从这三个表中删除。
(1)操作系统:Windows7及以上;
(2)Hadoop版本:3.1.3;
(3)JDK版本:1.8;
(4)MySQL版本:8.0.23;
(5)Python版本:3.8.7。
四、实验实施步骤
(一)使用python操作MySQL数据库
- 查询学号为10002学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
- import pymysql.cursors
# 连接数据库
connect = pymysql.Connect(
host=\'localhost\',
port=3306,
user=\'root\',
passwd=\'520521\',
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 = (\'10002\',)
# 执行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()
(2)查询每位学生成绩大于85的课程,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。
- # 获取游标
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 = (85, )
# 执行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)由于培养计划改,现需将课程号为00001、课程名为DataBase的学分改为5学分。
# 获取游标
cursor = connect.cursor()
# 设置sql语句
sql = \"UPDATE course SET Credit = %d \" \\
\"WHERE Cno = \'%s\'\"
# 设置数据
data = (5, \'00001\')
# 执行sql语句,并获取执行结果
result = cursor.execute(sql % data)
# 提交事务
connect.commit()
# 查看执行结果
print(result)
# 关闭数据库连接
cursor.close()
connect.close()
- 将学号为10005的学生, OperatingSystems(00004)成绩为73分这一记录写入选课表中。
- cursor = connect.cursor()
# 设置sql语句
sql = \"INSERT INTO sc(Sno,Cno,Grade) VALUES(\'%s\',\'%s\',%d)\"
# 设置数据
data = (\'10005\', \'00004\', 73)
# 执行sql语句,并获取执行结果