完成实验一python内容
时间: 2024-12-11 21:32:22 浏览: 8
### 实验一:MySQL与HDFS操作 —— 使用Python操作MySQL数据库
#### 实验目的
1. 总结使用 Python 操作 MySQL 数据库的方法;
2. 能够使用 Shell 命令操作 HDFS,上传和下载文件。
#### 实验环境
- MySQL 版本:8.0.23
- Python 版本:3.7
- 大数据平台
#### 实验内容
1. **创建数据表**
- 创建 `student` 表
- 创建 `course` 表
- 创建 `sc` 表
2. **插入数据**
- 插入 `student` 表数据
- 插入 `course` 表数据
- 插入 `sc` 表数据
3. **查询数据**
- 查询学号为 10002 学生的所有成绩
- 查询每位学生成绩大于 85 的课程
4. **修改数据**
- 修改课程号为 00001 的学分
5. **插入新记录**
- 插入学号为 10005 的学生 OperatingSystems 成绩
#### 实验步骤
##### 1. 导入必要的库
```python
import pymysql.cursors
```
##### 2. 连接数据库
```python
connect = pymysql.Connect(
host='localhost',
port=3306,
user='root',
passwd='123456',
db='school',
charset='utf8'
)
cursor = connect.cursor()
```
##### 3. 创建数据表
```python
# 创建 student 表
cursor.execute("""
CREATE TABLE IF NOT EXISTS student (
Sno VARCHAR(10) PRIMARY KEY,
Sname VARCHAR(50),
Ssex CHAR(2),
Sage INT,
Sdept VARCHAR(50)
)
""")
# 创建 course 表
cursor.execute("""
CREATE TABLE IF NOT EXISTS course (
Cno VARCHAR(10) PRIMARY KEY,
Cname VARCHAR(50),
Credit INT
)
""")
# 创建 sc 表
cursor.execute("""
CREATE TABLE IF NOT EXISTS sc (
Sno VARCHAR(10),
Cno VARCHAR(10),
Grade INT,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES student(Sno),
FOREIGN KEY (Cno) REFERENCES course(Cno)
)
""")
```
##### 4. 插入数据
```python
# 插入 student 表数据
students = [
('10001', 'Jack', '男', 21, 'CS'),
('10002', 'Rose', '女', 20, 'SE'),
('10003', 'Michael', '男', 21, 'IS'),
('10004', 'Hepburn', '女', 19, 'CS'),
('10005', 'Lisa', '女', 20, 'SE')
]
for student in students:
cursor.execute(f"""
INSERT INTO student (Sno, Sname, Ssex, Sage, Sdept)
VALUES ('{student[0]}', '{student[1]}', '{student[2]}', {student[3]}, '{student[4]}')
""")
# 插入 course 表数据
courses = [
('00001', 'DataBase', 4),
('00002', 'DataStructure', 4),
('00003', 'Algorithms', 3),
('00004', 'OperatingSystems', 5),
('00005', 'ComputerNetwork', 4)
]
for course in courses:
cursor.execute(f"""
INSERT INTO course (Cno, Cname, Credit)
VALUES ('{course[0]}', '{course[1]}', {course[2]})
""")
# 插入 sc 表数据
sc_records = [
('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)
]
for record in sc_records:
cursor.execute(f"""
INSERT INTO sc (Sno, Cno, Grade)
VALUES ('{record[0]}', '{record[1]}', {record[2]})
""")
```
##### 5. 查询数据
```python
# 查询学号为 10002 学生的所有成绩
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',)
cursor.execute(sql, data)
results = cursor.fetchall()
print("共有 {} 条记录".format(cursor.rowcount))
for row in results:
print(f"学号:{row[0]}\t姓名:{row[1]}\t系别:{row[2]}\t课程号:{row[3]}\t课程名:{row[4]}\t成绩:{row[5]}")
# 查询每位学生成绩大于 85 的课程
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 > %s
"""
data = (85,)
cursor.execute(sql, data)
results = cursor.fetchall()
print("共有 {} 条记录".format(cursor.rowcount))
for row in results:
print(f"学号:{row[0]}\t姓名:{row[1]}\t系别:{row[2]}\t课程号:{row[3]}\t课程名:{row[4]}\t成绩:{row[5]}")
```
##### 6. 修改数据
```python
# 修改课程号为 00001 的学分
sql = """
UPDATE course
SET Credit = %s
WHERE Cno = %s
"""
data = (5, '00001')
result = cursor.execute(sql, data)
connect.commit()
print(result)
```
##### 7. 插入新记录
```python
# 插入学号为 10005 的学生 OperatingSystems 成绩
sql = """
INSERT INTO sc (Sno, Cno, Grade)
VALUES (%s, %s, %s)
"""
data = ('10005', '00004', 73)
result = cursor.execute(sql, data)
connect.commit()
print(result)
```
##### 8. 关闭数据库连接
```python
cursor.close()
connect.close()
```
#### 注意事项
1. 确保实验室环境安全,遵守实验室安全规定和操作规程。
2. 在进行实验之前,仔细阅读指导书,了解实验步骤和软件的使用方法。
3. 在实验过程中,及时、准确地记录实验数据和存在的问题。
#### 思考题
在实际应用中,如何管理和维护 HDFS 中的数据,包括数据的上传、下载、备份和恢复等操作?
#### 实验报告要求
1. 写出实验代码,并将实验结果截图粘贴在实验报告中结果位置;
2. 完成思考题。
阅读全文