① 以MySQL为数据库,围绕班级学生个人信息、课程信息、学生选课信息、学生课程结果信息,建立实体-关系数据库,求各表之间有主键、外键 ② 利用Python + MySQL 从程序端连写数据库,编写代号,现实学生个人信息录入、学生选课信息录入、学生成绩录入、班级学生成绩查询、班级学生成绩平均分+排名查询,查询结果利用Python保存为,Excel表格文件;
时间: 2023-06-26 15:10:20 浏览: 333
好的,我来为您解答。
① 建立实体-关系数据库
首先,我们需要定义表格的字段和类型,然后建立表格并设置主键和外键。
以下是一个简单的示例:
1. 学生表格(Student)
| Field | Type | Key |
| --- | --- | --- |
| id | int(11) | PRIMARY KEY |
| name | varchar(50) | |
| gender | varchar(10) | |
| birthday | date | |
2. 课程表格(Course)
| Field | Type | Key |
| --- | --- | --- |
| id | int(11) | PRIMARY KEY |
| name | varchar(50) | |
| teacher | varchar(50) | |
3. 学生选课表格(StudentCourse)
| Field | Type | Key |
| --- | --- | --- |
| id | int(11) | PRIMARY KEY |
| student_id | int(11) | FOREIGN KEY (Student.id) |
| course_id | int(11) | FOREIGN KEY (Course.id) |
4. 学生成绩表格(Score)
| Field | Type | Key |
| --- | --- | --- |
| id | int(11) | PRIMARY KEY |
| student_id | int(11) | FOREIGN KEY (Student.id) |
| course_id | int(11) | FOREIGN KEY (Course.id) |
| score | float | |
② 利用Python + MySQL 连接数据库,编写代号
接下来,我们需要使用Python来连接MySQL数据库,并编写相应的代码实现录入、查询、保存为Excel表格文件等功能。
这里提供一个简单的示例代码:
```python
import pymysql
import xlwt
def connect_db():
# 连接数据库
db = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8')
return db
def insert_student(db, name, gender, birthday):
# 插入学生信息
cursor = db.cursor()
sql = "INSERT INTO Student (name, gender, birthday) VALUES (%s, %s, %s)"
cursor.execute(sql, (name, gender, birthday))
db.commit()
def insert_course(db, name, teacher):
# 插入课程信息
cursor = db.cursor()
sql = "INSERT INTO Course (name, teacher) VALUES (%s, %s)"
cursor.execute(sql, (name, teacher))
db.commit()
def insert_student_course(db, student_id, course_id):
# 插入学生选课信息
cursor = db.cursor()
sql = "INSERT INTO StudentCourse (student_id, course_id) VALUES (%s, %s)"
cursor.execute(sql, (student_id, course_id))
db.commit()
def insert_score(db, student_id, course_id, score):
# 插入学生成绩信息
cursor = db.cursor()
sql = "INSERT INTO Score (student_id, course_id, score) VALUES (%s, %s, %s)"
cursor.execute(sql, (student_id, course_id, score))
db.commit()
def query_class_score_avg(db):
# 查询班级学生成绩平均分和排名
cursor = db.cursor()
sql = "SELECT Student.name, AVG(Score.score) AS avg_score, RANK() OVER (ORDER BY AVG(Score.score) DESC) AS rank FROM Student JOIN Score ON Student.id = Score.student_id GROUP BY Student.id ORDER BY avg_score DESC"
cursor.execute(sql)
data = cursor.fetchall()
return data
def save_to_excel(data):
# 保存为Excel表格文件
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('Sheet1')
row = 0
for i in range(len(data)):
col = 0
for j in range(len(data[i])):
worksheet.write(row, col, data[i][j])
col += 1
row += 1
workbook.save('result.xls')
if __name__ == '__main__':
db = connect_db()
insert_student(db, '张三', '男', '2000-01-01')
insert_student(db, '李四', '女', '2000-01-02')
insert_course(db, '语文', '王老师')
insert_course(db, '数学', '李老师')
insert_student_course(db, 1, 1)
insert_student_course(db, 1, 2)
insert_student_course(db, 2, 1)
insert_score(db, 1, 1, 90)
insert_score(db, 1, 2, 80)
insert_score(db, 2, 1, 70)
data = query_class_score_avg(db)
save_to_excel(data)
db.close()
```
以上代码实现了录入学生信息、课程信息、学生选课信息、学生成绩信息,查询班级学生成绩平均分和排名,并将查询结果保存为Excel表格文件的功能。
需要注意的是,这里使用了pymysql库来连接MySQL数据库,以及xlwt库来保存为Excel表格文件。同时,还需要根据实际情况修改数据库连接信息、表格名称、字段名称等参数。
希望能对您有所帮助!
阅读全文