小明:嘿,小李,我最近在做一个项目,是关于学校迎新的,想搭建一个管理系统,你觉得怎么开始比较好?
小李:哦,迎新管理系统啊,这个挺常见的。你可以先考虑系统的功能模块,比如学生信息录入、流程管理、通知发布这些。不过你有没有想过要集成一个知识库?这样可以方便新生快速获取相关信息。
小明:知识库?具体是什么意思?
小李:就是把一些常见问题和解答存储起来,比如“入学流程”、“宿舍安排”、“缴费方式”等,用户可以直接查询,不需要人工回答。这能提高效率,也能减少客服压力。
小明:听起来不错!那怎么实现呢?需要写什么代码?
小李:我们可以用Python来开发,配合数据库,比如MySQL或者PostgreSQL。前端可以用Flask或者Django框架,后端处理数据和逻辑,数据库负责存储信息。
小明:那我们先从数据库开始吧,我得先设计表结构。
小李:对的,先建两个表:一个是学生信息表,另一个是知识库表。学生信息表包括学号、姓名、专业、联系方式等字段;知识库表包括问题、答案、分类、发布时间等。
小明:那具体的SQL语句应该怎么写?
小李:好的,我给你写一段示例代码,用MySQL来创建这两个表。
CREATE DATABASE new_student_system;
USE new_student_system;
-- 学生信息表
CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
major VARCHAR(100) NOT NULL,
phone VARCHAR(20),
email VARCHAR(100),
registration_date DATE
);
-- 知识库表
CREATE TABLE knowledge_base (
question_id INT AUTO_INCREMENT PRIMARY KEY,
question TEXT NOT NULL,
answer TEXT NOT NULL,
category VARCHAR(50),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
小明:嗯,看起来没问题。那接下来怎么用Python连接数据库呢?
小李:可以用MySQLdb或者pymysql这样的库。我来写一个简单的例子,演示如何插入数据到学生表中。
import pymysql
# 连接数据库
connection = pymysql.connect(
host='localhost',
user='root',
password='your_password',
database='new_student_system'
)
# 插入学生信息
cursor = connection.cursor()
query = "INSERT INTO students (name, major, phone, email) VALUES (%s, %s, %s, %s)"
values = ('张三', '计算机科学', '13812345678', 'zhangsan@example.com')
cursor.execute(query, values)
connection.commit()
# 关闭连接
cursor.close()
connection.close()
小明:明白了,那知识库部分怎么操作呢?比如添加一条问答记录。
小李:一样的道理,我们也可以用同样的方法插入知识库表。
# 插入知识库内容
query = "INSERT INTO knowledge_base (question, answer, category) VALUES (%s, %s, %s)"
values = ('入学流程是什么?', '新生需先注册账号,然后填写个人信息,最后完成缴费并领取教材。', '入学指南')
cursor.execute(query, values)
connection.commit()
小明:那怎么查询呢?比如根据分类查找问题。
小李:可以用SELECT语句,加上WHERE条件。例如,查询“入学指南”类别的所有问题。
# 查询知识库内容
query = "SELECT * FROM knowledge_base WHERE category = %s"
values = ('入学指南',)
cursor.execute(query, values)
results = cursor.fetchall()
for row in results:
print(row)
# 输出类似:(1, '入学流程是什么?', '新生需先注册账号...','入学指南', '2025-04-05 10:00:00')
# 可以将结果返回给前端展示
# 比如显示在网页上
# 例如:print(f"问题:{row[1]},答案:{row[2]}")
# 或者用模板引擎渲染成HTML页面
# 后面我们会讲到如何用Flask来构建Web界面
# 但我们现在先专注于数据库操作
# 所以这部分暂时不展开
# 不过你可以理解为,查询出来的数据可以被用来生成网页内容
# 或者作为API接口的数据源
小明:原来如此,那如果我要实现一个Web界面,让管理员可以添加学生信息和知识库内容,该怎么做?
小李:这就是用Flask或者Django这类框架来构建Web应用了。我们可以先用Flask来做一个简单的例子。
小明:那我应该安装什么依赖?
小李:你需要安装Flask和pymysql。可以用pip安装:
pip install flask pymysql
小明:那代码该怎么写?
小李:我可以给你一个简单的Flask应用示例,包含添加学生信息和知识库内容的功能。
from flask import Flask, request, render_template, redirect, url_for
import pymysql
app = Flask(__name__)
# 数据库连接配置
def get_db_connection():
return pymysql.connect(
host='localhost',
user='root',
password='your_password',
database='new_student_system'
)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/add_student', methods=['POST'])
def add_student():
name = request.form['name']
major = request.form['major']
phone = request.form['phone']
email = request.form['email']
conn = get_db_connection()
cursor = conn.cursor()
query = "INSERT INTO students (name, major, phone, email) VALUES (%s, %s, %s, %s)"
cursor.execute(query, (name, major, phone, email))
conn.commit()
cursor.close()
conn.close()
return redirect(url_for('index'))
@app.route('/add_knowledge', methods=['POST'])
def add_knowledge():
question = request.form['question']
answer = request.form['answer']
category = request.form['category']
conn = get_db_connection()
cursor = conn.cursor()
query = "INSERT INTO knowledge_base (question, answer, category) VALUES (%s, %s, %s)"
cursor.execute(query, (question, answer, category))
conn.commit()
cursor.close()
conn.close()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
小明:那前端页面怎么写?
小李:前端可以简单一点,比如用HTML+Bootstrap,创建两个表单,分别用于添加学生和知识库内容。
迎新管理系统
添加学生信息
添加知识库内容
小明:太好了,这样就实现了基本功能。那接下来是不是还要做查询功能?
小李:是的,我们可以再添加一个查询页面,让用户可以根据关键词搜索知识库内容。

小明:那怎么实现呢?
小李:可以用SELECT语句加LIKE模糊匹配。例如,用户输入“入学”,就能查出所有包含“入学”的问题。
@app.route('/search', methods=['GET'])
def search():
keyword = request.args.get('keyword', '')
conn = get_db_connection()
cursor = conn.cursor()
query = "SELECT * FROM knowledge_base WHERE question LIKE %s OR answer LIKE %s"
values = (f'%{keyword}%', f'%{keyword}%')
cursor.execute(query, values)
results = cursor.fetchall()
cursor.close()
conn.close()
return render_template('search_results.html', results=results)
小明:那前端怎么写?
小李:可以加一个搜索框,跳转到/search页面,并传入keyword参数。
知识库搜索结果
搜索结果
{% if results %}
{% for row in results %}
-
{{ row[1] }}
{{ row[2] }}
{% endfor %}
{% else %}
没有找到相关结果。
{% endif %}
小明:看来这个系统已经具备基本功能了。还有哪些可以优化的地方?
小李:可以考虑加入权限管理,比如只有管理员才能添加学生或知识库内容。还可以增加导出功能,比如导出学生信息为Excel或CSV文件。
小明:那导出功能怎么实现?
小李:可以用pandas库读取数据库数据,然后生成Excel文件。这里是一个简单的示例。
import pandas as pd
import pymysql
def export_students_to_excel():
conn = pymysql.connect(
host='localhost',
user='root',
password='your_password',
database='new_student_system'
)
query = "SELECT * FROM students"
df = pd.read_sql(query, conn)
df.to_excel('students.xlsx', index=False)
conn.close()
print("导出成功!")
小明:这样就能直接生成Excel文件了,非常实用。
小李:是的,而且你可以把这个功能封装成一个按钮,点击即可下载。
小明:那我觉得这个系统已经初步完成了。感谢你的帮助!
小李:不客气,这是个不错的项目,以后还可以扩展更多功能,比如短信通知、在线答疑、自动回复等。
