小明:最近我在研究数据管理平台在大学里的应用,感觉这个领域挺有意思的。
小李:是啊,现在很多大学都在用数据管理平台来处理学生信息、课程安排、科研数据等等。
小明:那你觉得,这些平台是怎么构建的?有没有什么具体的例子可以参考?
小李:我们可以从一个简单的例子开始。比如,建立一个学生信息管理系统,使用Python和SQLite数据库来实现。
小明:听起来不错。那你能给我演示一下吗?
小李:当然可以。我们先创建一个数据库,然后设计一些表,比如学生表、课程表和成绩表。
小明:那具体怎么操作呢?我需要安装什么工具吗?
小李:只需要安装Python和SQLite即可。Python自带了SQLite模块,所以不需要额外安装。
小明:好的,那我先写一段代码试试看。
小李:没问题,下面是一段创建数据库和表的代码:
import sqlite3
# 连接数据库(如果不存在则会自动创建)
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
# 创建学生表
cursor.execute('''
CREATE TABLE IF NOT EXISTS students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
student_id TEXT UNIQUE NOT NULL,
major TEXT
)
''')

# 创建课程表
cursor.execute('''
CREATE TABLE IF NOT EXISTS courses (
course_id INTEGER PRIMARY KEY AUTOINCREMENT,
course_name TEXT NOT NULL,
instructor TEXT
)
''')
# 创建成绩表
cursor.execute('''
CREATE TABLE IF NOT EXISTS grades (
id INTEGER PRIMARY KEY AUTOINCREMENT,
student_id TEXT NOT NULL,
course_id INTEGER NOT NULL,
grade REAL,
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
)
''')
# 提交更改
conn.commit()
# 关闭连接
conn.close()
小明:这段代码看起来很清晰。那接下来是不是要插入一些数据测试一下?
小李:没错,我们可以写一段插入数据的代码,看看是否能正常运行。
小明:好,那我试试看。
小李:下面是插入学生的代码:

import sqlite3
def insert_student(name, student_id, major):
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO students (name, student_id, major) VALUES (?, ?, ?)',
(name, student_id, major))
conn.commit()
conn.close()
# 插入一名学生
insert_student("张三", "2021001", "计算机科学")
小明:那我可以查询一下数据吗?
小李:当然可以,下面是一个查询学生的函数:
def get_students():
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM students')
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
# 查询所有学生
get_students()
小明:这样就能看到数据了。那如果我要添加课程和成绩呢?
小李:同样的方式,我们也可以插入课程和成绩的数据。
小明:那我来试试插入课程。
小李:好的,下面是一段插入课程的代码:
def insert_course(course_name, instructor):
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO courses (course_name, instructor) VALUES (?, ?)',
(course_name, instructor))
conn.commit()
conn.close()
# 插入一门课程
insert_course("数据库原理", "李老师")
小明:现在我再插入成绩。
小李:那我们需要知道学生的student_id和课程的course_id。
小明:那我先查一下学生和课程的信息。
小李:好的,我们先获取学生和课程的ID。
小明:那我来写个函数,根据名字查找学生ID。
小李:这可能需要更复杂的查询,不过我们可以先简单实现。
小明:那我先写一个根据姓名查找学生ID的函数。
小李:好的,下面是代码:
def get_student_id_by_name(name):
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
cursor.execute('SELECT student_id FROM students WHERE name = ?', (name,))
result = cursor.fetchone()
conn.close()
if result:
return result[0]
else:
return None
# 查找张三的student_id
student_id = get_student_id_by_name("张三")
print("张三的student_id:", student_id)
小明:那我再写一个根据课程名查找course_id的函数。
小李:对,这样我们就可以把成绩关联到学生和课程上。
小明:好的,下面是代码:
def get_course_id_by_name(course_name):
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
cursor.execute('SELECT course_id FROM courses WHERE course_name = ?', (course_name,))
result = cursor.fetchone()
conn.close()
if result:
return result[0]
else:
return None
# 查找“数据库原理”的course_id

course_id = get_course_id_by_name("数据库原理")
print("数据库原理的course_id:", course_id)
小明:现在我可以用这两个ID来插入成绩了。
小李:没错,下面是一段插入成绩的代码:
def insert_grade(student_id, course_id, grade):
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
cursor.execute('INSERT INTO grades (student_id, course_id, grade) VALUES (?, ?, ?)',
(student_id, course_id, grade))
conn.commit()
conn.close()
# 插入张三在“数据库原理”课程的成绩
insert_grade(student_id, course_id, 85.5)
小明:现在我再查询一下成绩,看看是否成功。
小李:好的,下面是查询成绩的函数:
def get_grades():
conn = sqlite3.connect('university.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM grades')
rows = cursor.fetchall()
for row in rows:
print(row)
conn.close()
# 查询所有成绩
get_grades()
小明:看来一切正常!那这个系统可以扩展吗?比如加入更多功能?
小李:当然可以,比如我们可以添加用户权限管理、数据备份、数据可视化等功能。
小明:那如果我们要做一个更完整的系统,应该怎么做呢?
小李:我们可以使用Web框架,比如Flask或Django,来构建一个基于Web的数据管理平台。
小明:那我可以尝试写一个简单的Web接口吗?
小李:当然可以,下面是一个简单的Flask应用示例,用于展示学生信息。
from flask import Flask, jsonify
import sqlite3
app = Flask(__name__)
def get_db_connection():
conn = sqlite3.connect('university.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/students', methods=['GET'])
def get_students():
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM students')
students = cursor.fetchall()
conn.close()
return jsonify([dict(student) for student in students])
if __name__ == '__main__':
app.run(debug=True)
小明:那我可以通过访问http://localhost:5000/students来查看学生数据了。
小李:没错,这就是一个简单的REST API,可以作为数据管理平台的一部分。
小明:那如果我要添加更多功能,比如添加学生、修改成绩等呢?
小李:我们可以继续扩展这个API,添加POST、PUT、DELETE方法。
小明:听起来很有意思,我可以继续学习这方面的知识。
小李:是的,数据管理平台在大学中非常重要,它可以帮助学校更好地管理教学资源和学生信息。
小明:谢谢你,今天学到了很多东西。
小李:不客气,希望你能在实际项目中应用这些知识。
