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 通过编程实现以下题目: (1) 查询学号为10002学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。 (2) 查询每位学生成绩大于85的课程,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。 (3) 由于培养计划改,现需将课程号为00001、课程名为DataBase的学分改为5学分。 (4) 将学号为10005的学生, OperatingSystems(00004)成绩为73分这一记录写入选课表中。 将学号为10003的学生从这三个表中删除。 2.使用Shell命令操作HDFS 在Windows系统中安装Hadoop3.1.3,然后完成下面题目中的各项操作: (1)使用自己的用户名登录Windows系统,启动Hadoop,为当前登录的Windows用户在HDFS中创建用户目录“/user/[用户名]”; (2)接着在HDFS的目录“/user/[用户名]”下,创建test目录; (3)将Windows系统本地的一个文件上传到HDFS的test目录中,并查看上传后的文件内容; (4)将HDFS目录test复制到Windows本地文件系统的某个目录下。
时间: 2025-03-23 14:20:47 浏览: 70
### **题目解答**
#### **第一部分:Python操作MySQL数据库**
以下是基于Python和MySQL的解决方案,逐步实现每个任务。
---
##### **准备工作**
需要先安装`mysql-connector-python`库。可以运行以下命令安装:
```bash
pip install mysql-connector-python
```
然后编写连接数据库的基本框架:
```python
import mysql.connector
# 创建连接配置
config = {
'host': 'localhost',
'user': 'root', # 替换为您的用户名
'password': '', # 替换为您的密码
'database': 'school' # 数据库名称
}
def connect_db():
try:
conn = mysql.connector.connect(**config)
if conn.is_connected():
print("数据库连接成功")
return conn
except Exception as e:
print(f"连接失败: {e}")
return None
```
接下来逐一解决问题:
---
**(1) 查询学号为10002学生的所有成绩,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。**
SQL查询语句如下:
```sql
SELECT S.Sno, S.Sname, S.Sdept, C.Cno, C.Cname, SC.Grade
FROM Student S
JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno
WHERE S.Sno = '10002';
```
完整代码示例:
```python
conn = connect_db()
cursor = conn.cursor()
query_1 = """
SELECT S.Sno, S.Sname, S.Sdept, C.Cno, C.Cname, SC.Grade
FROM Student S
JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno
WHERE S.Sno = %s;
"""
student_id = ('10002',)
cursor.execute(query_1, student_id)
result_1 = cursor.fetchall()
print("查询结果:", result_1)
```
---
**(2) 查询每位学生成绩大于85的课程,结果中需包含学号、姓名、所在系别、课程号、课程名以及对应成绩。**
SQL查询语句如下:
```sql
SELECT S.Sno, S.Sname, S.Sdept, C.Cno, C.Cname, SC.Grade
FROM Student S
JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno
WHERE SC.Grade > 85;
```
完整代码示例:
```python
query_2 = """
SELECT S.Sno, S.Sname, S.Sdept, C.Cno, C.Cname, SC.Grade
FROM Student S
JOIN SC ON S.Sno = SC.Sno
JOIN Course C ON SC.Cno = C.Cno
WHERE SC.Grade > 85;
"""
cursor.execute(query_2)
result_2 = cursor.fetchall()
print("查询结果:", result_2)
```
---
**(3) 修改课程表中学分为5学分的记录。**
更新课程信息的SQL语句如下:
```sql
UPDATE Course SET Credit = 5 WHERE Cno = '00001';
```
完整代码示例:
```python
update_query = "UPDATE Course SET Credit = %s WHERE Cno = %s;"
values = (5, '00001')
cursor.execute(update_query, values)
conn.commit() # 提交事务
print(cursor.rowcount, "条数据被修改")
```
---
**(4) 插入学号为10005学生的选课记录。**
插入新记录的SQL语句如下:
```sql
INSERT INTO SC(Sno, Cno, Grade) VALUES('10005', '00004', 73);
```
完整代码示例:
```python
insert_query = "INSERT INTO SC(Sno, Cno, Grade) VALUES(%s, %s, %s);"
record = ('10005', '00004', 73)
cursor.execute(insert_query, record)
conn.commit()
print(cursor.rowcount, "条数据被插入")
```
---
**(5) 删除学号为10003的学生所有相关信息。**
依次删除相关表的数据:
```sql
DELETE FROM SC WHERE Sno='10003'; -- 先删选课表
DELETE FROM Course WHERE EXISTS (
SELECT * FROM SC WHERE SC.Cno=Course.Cno AND SC.Sno='10003'
);
-- 如果不需要级联删除,则手动检查是否有依赖关系
DELETE FROM Student WHERE Sno='10003';
```
完整代码示例:
```python
delete_sc_query = "DELETE FROM SC WHERE Sno=%s;"
delete_student_query = "DELETE FROM Student WHERE Sno=%s;"
sno_to_delete = ('10003',)
cursor.execute(delete_sc_query, sno_to_delete)
cursor.execute(delete_student_query, sno_to_delete)
conn.commit()
print(cursor.rowcount, "条数据被删除")
```
---
#### **第二部分:Shell命令操作HDFS**
以下是每一步的具体操作指令。
---
**(1) 使用自己的用户名登录Windows系统,启动Hadoop,为当前登录的Windows用户在HDFS中创建用户目录“/user/[用户名]”。**
启动Hadoop服务并验证是否正常工作:
```bash
start-dfs.sh # 启动分布式文件系统
hdfs dfs -ls /
```
创建用户目录:
```bash
hdfs dfs -mkdir /user/$USER
hdfs dfs -chmod 755 /user/$USER # 设置权限
```
---
**(2) 接着在HDFS的目录“/user/[用户名]”下,创建test目录。**
```bash
hdfs dfs -mkdir /user/$USER/test
hdfs dfs -ls /user/$USER/
```
---
**(3) 将Windows系统本地的一个文件上传到HDFS的test目录中,并查看上传后的文件内容。**
假设有一个文本文件 `local_file.txt` 要上传:
```bash
hdfs dfs -put local_file.txt /user/$USER/test/
hdfs dfs -cat /user/$USER/test/local_file.txt
```
---
**(4) 将HDFS目录test复制到Windows本地文件系统的某个目录下。**
下载整个`test`目录到本地路径 `/path/to/local/directory` 下:
```bash
hdfs dfs -get /user/$USER/test /path/to/local/directory
```
---
#### §**相关问题§**:
1. Python如何处理复杂的跨表关联查询?
2. MySQL中的外键约束对性能有何影响?
3. HDFS的操作效率为何比普通文件系统低?
阅读全文
相关推荐
















