为了确保开发过程零门槛且系统运行稳定,本指南采用 Python 作为开发语言,配合 Streamlit 框架进行快速 Web 开发,并使用 SQLite 作为本地数据库。这种组合无需配置复杂的服务器环境,安装 Python 后即可直接运行,非常适合部门内部档案管理。
步骤一:安装 Python 环境
如果你的电脑尚未安装 Python,请访问 Python 官网下载安装包。建议下载 3.9 或 3.10 版本(稳定且兼容性好)。下载地址如下:
https://www.python.org/downloads/
安装时,务必勾选 "Add Python to PATH" 选项,这将允许我们在命令行中直接使用 Python 命令。
步骤二:安装必要依赖库
打开命令行工具(Windows 按 Win+R 输入 cmd 回车),依次执行以下命令安装 Streamlit 和 Pandas(用于数据处理):
pip install streamlit pandas
安装完成后,输入 streamlit hello,如果浏览器自动弹出页面,说明环境配置成功。
在 D 盘或任意位置新建一个文件夹,命名为 livestock_system。进入该文件夹,新建一个空白的文本文件,并将其重命名为 app.py。这个文件将包含我们所有的后端逻辑和前端页面代码。
我们使用 SQLite 内置数据库,无需额外安装软件。在 app.py 文件的开头,我们需要编写代码来自动创建数据库表结构。这个表将存储牲畜的核心档案信息。
请将以下代码完整复制到 app.py 文件中:
```python
import streamlit as st
import sqlite3
import pandas as pd
import os
数据库文件名
DB_FILE = "livestock_data.db"
初始化数据库连接
def get_connection():
conn = sqlite3.connect(DB_FILE)
return conn
初始化表结构
def init_db():
conn = get_connection()
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS livestock (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ear_tag TEXT NOT NULL UNIQUE,
breed TEXT NOT NULL,
gender TEXT NOT NULL,
birth_date DATE,
entry_date DATE,
health_status TEXT,
location TEXT
)
''')
conn.commit()
conn.close()
```
这段代码定义了一个名为 livestock 的表,包含耳标号(唯一标识)、品种、性别、出生日期、入栏日期、健康状态和所在栏位等关键字段。
接下来实现档案录入界面。Streamlit 提供了表单组件,非常适合数据录入。我们在 app.py 中继续添加如下代码,构建录入页面和数据处理逻辑:
```python
添加档案函数
def add_record(data):
conn = get_connection()
cursor = conn.cursor()
try:
cursor.execute('''
INSERT INTO livestock (ear_tag, breed, gender, birth_date, entry_date, health_status, location)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (data['ear_tag'], data['breed'], data['gender'], data['birth_date'], data['entry_date'], data['health_status'], data['location']))
conn.commit()
return True
except sqlite3.IntegrityError:
return False
finally:
conn.close()
页面配置
st.set_page_config(page_title="畜牧部门档案管理系统", layout="wide")
init_db()
侧边栏导航
st.sidebar.title("功能导航")
page = st.sidebar.radio("选择操作", ["档案录入", "档案查询与管理", "数据导出"])
if page == "档案录入":
st.header("新增牲畜档案")
with st.form("entry_form"):
col1, col2 = st.columns(2)
with col1:
ear_tag = st.text_input("耳标号 (唯一标识)", max_chars=20)
breed = st.text_input("品种 (如: 杜洛克)", max_chars=20)
gender = st.selectbox("性别", ["公", "母"])
birth_date = st.date_input("出生日期")
with col2:

entry_date = st.date_input("入栏日期")
health_status = st.selectbox("健康状态", ["健康", "观察中", "患病", "隔离"])
location = st.text_input("所在栏位 (如: 1号舍-A区)", max_chars=20)
submitted = st.form_submit_button("保存档案")
if submitted:
if not ear_tag or not breed:
st.error("耳标号和品种为必填项!")
else:
record_data = {
'ear_tag': ear_tag, 'breed': breed, 'gender': gender,
'birth_date': str(birth_date), 'entry_date': str(entry_date),
'health_status': health_status, 'location': location
}
if add_record(record_data):
st.success("档案录入成功!")
else:
st.error("录入失败:该耳标号已存在!")
```
这部分代码利用双列布局优化了页面空间,并对必填项进行了校验。特别是耳标号,我们设置了数据库层面的唯一约束,防止重复录入。
档案管理不仅需要录入,还需要查询和删除。我们在 app.py 中继续追加“档案查询与管理”页面的代码:
```python
elif page == "档案查询与管理":
st.header("档案查询与管理")
搜索框
search_term = st.text_input("输入耳标号或品种进行搜索", "")
conn = get_connection()
查询逻辑
if search_term:
query = "SELECT FROM livestock WHERE ear_tag LIKE ? OR breed LIKE ?"
df = pd.read_sql(query, conn, params=(f'%{search_term}%', f'%{search_term}%'))
else:
query = "SELECT FROM livestock ORDER BY id DESC"
df = pd.read_sql(query, conn)
conn.close()
if not df.empty:
st.dataframe(df, use_container_width=True)
删除功能区域
st.subheader("档案删除操作")
with st.expander("点击展开删除功能"):
del_id = st.number_input("输入要删除的档案 ID (见上方表格第一列)", min_value=1, step=1)
if st.button("确认删除", type="primary"):
conn = get_connection()
cursor = conn.cursor()
cursor.execute("DELETE FROM livestock WHERE id = ?", (del_id,))
conn.commit()
conn.close()
st.warning(f"ID 为 {del_id} 的档案已删除,请刷新页面查看。")
st.rerun()
else:
st.info("未找到相关档案记录。")
```
这里使用了 Pandas 的 read_sql 功能直接将查询结果转换为 DataFrame 并在网页上渲染为表格。删除功能被折叠在“展开删除功能”区域中,以防止误操作。
为了方便部门进行报表汇总,我们添加一个将数据导出为 CSV 文件的功能。继续在 app.py 追加代码:
```python
elif page == "数据导出":
st.header("数据导出")
conn = get_connection()
df = pd.read_sql("SELECT FROM livestock ORDER BY id DESC", conn)
conn.close()
if not df.empty:
csv = df.to_csv(index=False).encode('utf-8-sig')
st.download_button(
label="下载完整档案 CSV",
data=csv,
file_name='livestock_records.csv',
mime='text/csv',
)
st.info("点击上方按钮即可下载当前所有档案数据。")
else:
st.warning("数据库暂无数据可导出。")
```
此功能利用 to_csv 生成数据流,并通过 Streamlit 的下载组件触发浏览器下载,生成的 CSV 文件可直接用 Excel 打开。
代码编写完毕后,保存 app.py 文件。回到命令行工具,进入项目所在目录,执行以下启动命令:
streamlit run app.py
命令执行后,系统会自动启动本地 Web 服务,并默认使用浏览器打开 http://localhost:8501。
操作要点:
至此,一个包含增删改查(CRUD)核心功能的畜牧部门档案管理系统已完全落地。所有数据均保存在项目目录下的 livestock_data.db 文件中,备份时只需复制该文件即可。
档案数字化,政府档案保密要求高怎么办?别慌,这有“通关秘籍”