根据实验2.1中创建的学生成绩管理数据库以及学生表、课程表和学生成绩表,在Python中使用Python代码和SQL语句完成数据操作功能。按要求完成实验,并给出代码和重要步骤截图:
(1)在Python代码中连接数据库qiangzi。
(2)使用Python代码往学生成绩表中插入以下两条数据。
M001 | 0531 | 2019-2-26 13:15:12 | 77 | 0.4 | |
K002 | 0591 | 2018-2-26 13:15:12 | 82.5 | 0.4 | 86 |
(3)使用Python代码把平时成绩和期末成绩为空的学生的成绩修改成0。
(4)使用Python代码查询出所有学生的每门课程的总成绩(总成绩=平时成绩*平时成绩比重+考试成绩*(1-平时成绩比重))并输出。
(5)使用Python代码统计学生期末成绩低于所有学生总平均分的人数。
(6)使用Python代码删除平时成绩和期末成绩都为0的数据,并输出删除的记录数。
# @Time: 2023/5/4 22:22
# @Author: 马龙强
# @File: Mysql.py
# @software: PyCharm
import pymysql
# 打开数据库连接
db = pymysql.connect(host='localhost',
user='root',
password='789456111',
port=3306,
db='qiangzi')
print('连接成功');
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 插入数据
sql_insert = """INSERT INTO record (cn, sn, cst, up, tatio, exam)
VALUES ('M001', '0531', '2019-2-26 13:15:12', 77, 0.4, null),
('K002', '0591', '2018-2-26 13:15:12', 82.5, 0.4, 86)"""
cursor.execute(sql_insert)
db.commit()
# 修改成绩为0的学生信息
sql_update = """UPDATE record SET up=0, exam=0 WHERE up IS NULL AND exam IS NULL"""
cursor.execute(sql_update)
db.commit()
# 查询每门课程的总成绩并输出
sql_total_score = """SELECT cn, sn, up * tatio + exam * (1 - tatio) AS total_score
FROM record"""
cursor.execute(sql_total_score)
results = cursor.fetchall()
for row in results:
print(f"学生{row[1]}的{row[0]}总成绩为:{row[2]}")
# 统计期末成绩低于平均分的学生人数
sql_avg_score = """SELECT AVG(up * tatio + exam * (1 - tatio)) AS avg_score
FROM record"""
cursor.execute(sql_avg_score)
result = cursor.fetchone()
avg_score = result[0]
sql_less_than_avg = f"""SELECT COUNT(*) FROM record
WHERE (up * tatio + exam * (1 - tatio)) < {avg_score}"""
cursor.execute(sql_less_than_avg)
result = cursor.fetchone()
print(f"期末成绩低于平均分的学生人数有:{result[0]}")
# 删除平时成绩和期末成绩都为0的数据,并输出删除的记录数
sql_delete = """DELETE FROM record WHERE up=0 AND exam=0"""
cursor.execute(sql_delete)
db.commit()
deleted_num = cursor.rowcount
print(f"已删除{deleted_num}条数据")
# 关闭数据库连接
db.close()