小明:你好,李老师,最近我在研究高校人事系统的优化问题,听说你对Python有深入的研究,能和我聊聊吗?
李老师:当然可以!你对高校人事系统有什么具体的问题吗?比如数据处理、自动化流程,还是系统集成方面的?
小明:主要是数据处理和自动化方面。我们学校的人事系统现在用的是一个老旧的数据库,很多信息更新不及时,而且手动操作太麻烦了。我想用Python来改善这个情况。
李老师:这确实是个很实际的问题。Python在数据处理和自动化方面非常强大。我们可以从几个方面入手,比如使用Python连接数据库、处理数据、生成报告,甚至实现一些自动化的任务。
小明:听起来很有意思。那你能给我举个例子吗?比如怎么用Python连接数据库?
李老师:当然可以。首先,我们需要安装Python的数据库连接库,比如`pyodbc`或`sqlalchemy`。下面是一个简单的示例代码,展示如何用Python连接到SQL Server数据库:
import pyodbc
# 连接字符串
conn_str = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=your_server;'
'DATABASE=your_database;'
'UID=your_username;'
'PWD=your_password'
)
# 建立连接
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# 查询数据
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
for row in rows:
print(row)
# 关闭连接
cursor.close()
conn.close()
小明:这段代码看起来挺直观的。那如果我要把查询结果导出成Excel文件呢?
李老师:可以用`pandas`库来处理数据,并将其导出为Excel。下面是一个完整的例子:
import pandas as pd
import pyodbc
# 连接数据库
conn_str = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=your_server;'
'DATABASE=your_database;'
'UID=your_username;'
'PWD=your_password'
)
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# 查询数据
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
# 将数据转换为DataFrame
columns = [column[0] for column in cursor.description]
df = pd.DataFrame(rows, columns=columns)
# 导出为Excel
df.to_excel('employees.xlsx', index=False)
# 关闭连接
cursor.close()
conn.close()
小明:哇,这样就能直接生成Excel报表了,真的方便多了。那有没有办法把这些数据可视化呢?比如生成图表?
李老师:当然可以。我们可以用`matplotlib`或`seaborn`库来生成图表。比如,我们可以统计一下不同部门的员工数量,然后画出柱状图:
import pandas as pd
import matplotlib.pyplot as plt
import pyodbc
# 连接数据库
conn_str = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=your_server;'
'DATABASE=your_database;'
'UID=your_username;'
'PWD=your_password'
)
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# 查询数据
cursor.execute("SELECT department, COUNT(*) AS count FROM employees GROUP BY department")
rows = cursor.fetchall()
# 转换为DataFrame
columns = [column[0] for column in cursor.description]
df = pd.DataFrame(rows, columns=columns)
# 绘制柱状图
plt.figure(figsize=(10, 5))
plt.bar(df['department'], df['count'])
plt.xlabel('Department')
plt.ylabel('Number of Employees')
plt.title('Employee Count by Department')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 关闭连接
cursor.close()
conn.close()

小明:太棒了!这样不仅能够分析数据,还能直观地看到结果。那如果我想把这些功能封装成一个脚本,定时运行呢?
李老师:这是一个非常好的想法。我们可以使用`schedule`库来设置定时任务。例如,每天早上8点执行一次数据提取和报表生成任务。
import schedule
import time
import pandas as pd
import pyodbc
def generate_report():
# 连接数据库
conn_str = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=your_server;'
'DATABASE=your_database;'
'UID=your_username;'
'PWD=your_password'
)
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# 查询数据
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
# 转换为DataFrame
columns = [column[0] for column in cursor.description]
df = pd.DataFrame(rows, columns=columns)
# 导出为Excel
df.to_excel('employees.xlsx', index=False)
# 关闭连接
cursor.close()
conn.close()
# 设置定时任务
schedule.every().day.at("08:00").do(generate_report)
# 启动调度器
while True:
schedule.run_pending()
time.sleep(1)
小明:这简直太完美了!这样就实现了自动化,省去了人工操作。那如果我们要把这些数据上传到云端或者发送邮件给管理员呢?
李老师:这也是可以实现的。比如,我们可以用`smtp`库发送邮件,或者用`boto3`将文件上传到AWS S3等云存储服务。
小明:那我可以先尝试发送邮件,你觉得怎么样?
李老师:好的,下面是一个发送邮件的简单示例。你需要配置好邮箱的SMTP服务器信息,比如QQ邮箱或163邮箱的SMTP地址和端口。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
# 邮件信息
sender_email = "your_email@example.com"
receiver_email = "admin@example.com"
subject = "每日员工报表"
body = "请查收今天的员工报表。"
# 创建邮件对象
msg = MIMEMultipart()
msg['From'] = sender_email
msg['To'] = receiver_email
msg['Subject'] = subject
# 添加正文
msg.attach(MIMEText(body, 'plain'))
# 添加附件
filename = "employees.xlsx"
attachment = open(filename, "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)
msg.attach(part)
# 发送邮件
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login(sender_email, "your_password")
text = msg.as_string()
server.sendmail(sender_email, receiver_email, text)
server.quit()
小明:这样就可以把报表自动发送给管理员了,真是高效!那接下来,我还想看看能不能把整个流程整合到一个Web界面中,让管理人员可以直接查看数据。
李老师:这需要使用Web框架,比如Flask或Django。我们可以创建一个简单的网页,展示员工信息,并允许搜索和筛选。
小明:那我可以先用Flask试试看,你能给我一个简单的例子吗?
李老师:当然可以。下面是一个使用Flask的简单示例,展示如何从数据库中获取数据并显示在网页上:
from flask import Flask, render_template
import pyodbc
app = Flask(__name__)
# 数据库连接
conn_str = (
'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=your_server;'
'DATABASE=your_database;'
'UID=your_username;'
'PWD=your_password'
)
@app.route('/')
def index():
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
columns = [column[0] for column in cursor.description]
cursor.close()
conn.close()
return render_template('index.html', columns=columns, rows=rows)
if __name__ == '__main__':
app.run(debug=True)
小明:那模板文件该怎么写呢?
李老师:我们可以创建一个名为`index.html`的模板文件,放在`templates`目录下。下面是简单的HTML代码:
员工信息
员工信息列表
| {{ column }} | {% endfor %}
|---|
| {{ item }} | {% endfor %}
小明:这样就完成了一个简单的Web界面,真是太棒了!看来Python在高校人事系统中的应用真的非常广泛。
李老师:没错,Python不仅提升了数据处理的效率,还增强了系统的可扩展性和用户体验。如果你有兴趣,还可以进一步学习Python的机器学习或大数据处理相关技术,用于更高级的数据分析。
小明:谢谢您,李老师!今天学到了很多,以后我会继续深入学习Python在高校人事系统中的应用。
李老师:不客气,随时欢迎你来交流。祝你项目顺利!
