在PyCharm中对MySQL数据库进行相关操作

根据实验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()

注意:代码中 cn、sn、cst、up、tatio、exam,分别对应学生成绩表(record)中的课程号、学号、选课时间、平时成绩、平时成绩比重、考试成绩。

猜你喜欢

转载自blog.csdn.net/m0_74972727/article/details/130507868
今日推荐