小明:最近我在研究学校的信息系统,发现很多高校的校友录管理还停留在纸质或简单的电子表格上,效率很低。
小李:是啊,确实如此。不过现在有很多新技术可以用来优化这个过程。比如用Python开发一个校友录管理系统,结合数据库,就能实现数据的高效管理和查询。
小明:听起来不错。那具体怎么操作呢?我有点基础,但不太清楚具体流程。
小李:我们可以从设计数据库开始。校友信息包括姓名、性别、出生年月、联系方式、毕业院校、专业、班级、工作单位等字段。这些都可以用SQL语句创建表来存储。
小明:那数据库选哪个好?MySQL还是PostgreSQL?
小李:两者都行,但如果是轻量级应用,MySQL更常见,也容易部署。我们先以MySQL为例。
小明:明白了。那代码部分呢?我需要写一个Python程序来连接数据库,并实现增删改查功能。
小李:对,可以用Python的MySQLdb或者pymysql库来连接数据库。然后编写一些函数来处理数据。
小明:那具体的代码结构是怎样的?有没有示例代码可以参考?
小李:当然有。我们可以先定义一个数据库连接函数,然后创建表,再写CRUD(增删改查)函数。
小明:好的,那我先试着写一下连接数据库的代码。
小李:没错,下面是一个简单的例子:
import pymysql
# 连接数据库
def connect_db():
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
db='alumni_db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
return conn
小明:这代码看起来很熟悉。那接下来是不是要创建校友信息表?
小李:对,我们可以使用SQL语句创建表。例如:
def create_table():
conn = connect_db()
with conn.cursor() as cursor:
sql = """
CREATE TABLE IF NOT EXISTS alumni (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
gender VARCHAR(10),
birth_date DATE,
phone VARCHAR(20),

school VARCHAR(100),
major VARCHAR(100),
class VARCHAR(50),

company VARCHAR(100)
)
"""
cursor.execute(sql)
conn.commit()
小明:这样就创建了一个校友信息表。那接下来怎么插入数据呢?
小李:我们可以写一个添加校友信息的函数,比如:
def add_alumni(name, gender, birth_date, phone, school, major, class_name, company):
conn = connect_db()
with conn.cursor() as cursor:
sql = """
INSERT INTO alumni (name, gender, birth_date, phone, school, major, class, company)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
cursor.execute(sql, (name, gender, birth_date, phone, school, major, class_name, company))
conn.commit()
小明:这样就能把数据插入到数据库里了。那查询呢?比如按姓名查找校友信息。
小李:同样,我们可以写一个查询函数,比如:
def get_alumni_by_name(name):
conn = connect_db()
with conn.cursor() as cursor:
sql = "SELECT * FROM alumni WHERE name = %s"
cursor.execute(sql, (name,))
result = cursor.fetchone()
return result
小明:这个函数返回的是单条记录,如果想查所有校友呢?
小李:那就可以用fetchall方法,比如:
def get_all_alumni():
conn = connect_db()
with conn.cursor() as cursor:
sql = "SELECT * FROM alumni"
cursor.execute(sql)
results = cursor.fetchall()
return results
小明:这样就实现了基本的数据查询功能。那删除和更新呢?
小李:删除的话,可以根据ID来删除,比如:
def delete_alumni(id):
conn = connect_db()
with conn.cursor() as cursor:
sql = "DELETE FROM alumni WHERE id = %s"
cursor.execute(sql, (id,))
conn.commit()
小明:那更新呢?比如修改某位校友的联系方式。
小李:同样用UPDATE语句,比如:
def update_alumni(id, phone):
conn = connect_db()
with conn.cursor() as cursor:
sql = "UPDATE alumni SET phone = %s WHERE id = %s"
cursor.execute(sql, (phone, id))
conn.commit()
小明:这样就完成了基本的CRUD操作。那整个系统是否还需要前端界面?
小李:是的,如果只是后端的话,用户操作起来不太方便。我们可以用Flask或者Django搭建一个简单的Web界面,让用户通过网页进行操作。
小明:那前端部分应该怎么设计?有没有推荐的框架?
小李:对于快速开发,Flask是个不错的选择。它简单易用,适合小型项目。我们可以用Jinja2模板来渲染页面,展示校友信息。
小明:那具体怎么整合前后端?比如在Flask中调用前面写的数据库函数。
小李:我们可以创建一个路由,比如“/alumni”,然后在该路由下执行查询并返回结果。
小明:那我可以尝试写一个简单的Flask应用吗?
小李:当然可以。下面是一个简单的例子:
from flask import Flask, render_template
import pymysql
app = Flask(__name__)
def connect_db():
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
db='alumni_db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
return conn
@app.route('/alumni')
def alumni_list():
conn = connect_db()
with conn.cursor() as cursor:
sql = "SELECT * FROM alumni"
cursor.execute(sql)
results = cursor.fetchall()
return render_template('alumni.html', alumni=results)
if __name__ == '__main__':
app.run(debug=True)
小明:这样就实现了一个简单的Web界面,可以显示所有校友信息。那前端页面该怎么写呢?
小李:前端部分可以用HTML和CSS,比如创建一个alumni.html文件,内容如下:
校友列表
- {{ alumni.name }} - {{ alumni.phone }}
{% for alumni in alumni %}
{% endfor %}
小明:这样就能动态显示数据了。那整个系统已经初步完成,还能做哪些扩展呢?
小李:比如增加搜索功能,支持按姓名、学校、公司等条件筛选;还可以加入登录系统,限制管理员权限;甚至可以对接微信公众号,推送校友活动信息。
小明:听起来很有前景。那这样的系统对校园信息化有什么帮助呢?
小李:首先,它可以提高校友信息的管理效率,避免信息丢失或重复录入。其次,为学校提供更好的校友服务,增强校友归属感。最后,也为未来的数据分析和校友资源挖掘打下基础。
小明:明白了。看来这个项目不仅技术上有挑战,也有实际应用价值。
小李:没错。如果你有兴趣,我们可以一起把这个项目完善起来,甚至申请一些创新基金。”
