You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit应用中数据库操作外置至db.py的实现方案问询

完全可行!这是Streamlit项目中分离业务逻辑与UI的最佳实践之一

一、推荐的文件夹结构

基础结构(小型项目)

my_streamlit_app/
├── app.py          # Streamlit主应用文件
├── db.py           # 数据库操作逻辑文件
└── requirements.txt # 依赖声明(如streamlit、sqlite3/sqlalchemy等)

扩展结构(中大型项目)

如果后续需要更多工具类,可以把数据库逻辑放到专门的工具目录:

my_streamlit_app/
├── app.py
├── utils/
│   ├── db.py       # 数据库操作
│   └── helpers.py  # 其他通用工具
└── requirements.txt

二、编写db.py的示例代码

以SQLite为例(无需额外服务,适合快速测试),在db.py中封装所有数据库连接和CRUD操作:

import sqlite3
from sqlite3 import Error

def create_connection():
    """创建数据库连接"""
    conn = None
    try:
        conn = sqlite3.connect('mydatabase.db')  # 本地SQLite文件
        return conn
    except Error as e:
        print(e)
    return conn

def add_user(conn, name, email):
    """新增用户记录"""
    sql = '''INSERT INTO users(name, email)
             VALUES(?,?)'''
    cur = conn.cursor()
    cur.execute(sql, (name, email))
    conn.commit()
    return cur.lastrowid

def get_all_users(conn):
    """获取所有用户记录"""
    cur = conn.cursor()
    cur.execute("SELECT * FROM users")
    rows = cur.fetchall()
    return rows

# 可继续编写update_user、delete_user等CRUD函数

三、在Streamlit应用中导入并使用

在app.py中直接导入db.py的函数,专注于UI交互:

import streamlit as st
from db import create_connection, add_user, get_all_users

# 初始化数据库连接
conn = create_connection()

# 页面UI
st.title("用户管理系统")

# 新增用户表单
with st.form("add_user_form"):
    name = st.text_input("姓名")
    email = st.text_input("邮箱")
    submitted = st.form_submit_button("添加用户")
    if submitted and name and email:
        user_id = add_user(conn, name, email)
        st.success(f"用户添加成功,ID: {user_id}")

# 展示所有用户
st.subheader("所有用户")
users = get_all_users(conn)
if users:
    st.table(users)
else:
    st.info("暂无用户数据")

如果是扩展结构(utils目录下的db.py),导入路径改为:

from utils.db import create_connection, add_user, get_all_users

四、关键注意事项

  • 连接管理:建议使用上下文管理器(with语句)确保数据库连接正确关闭,避免资源泄漏
  • 敏感信息:不要把数据库密码、地址硬编码在代码中,可使用环境变量(如os.getenv("DB_PASSWORD"))
  • 异常处理:在db.py中添加适当的异常捕获,避免数据库错误直接暴露到Streamlit UI
  • 依赖隔离:在requirements.txt中明确声明所有依赖,方便部署

内容的提问来源于stack exchange,提问作者akshayranganath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:02:24