一个用于展示数据库的streamlit模板

本文章将会创建一个streamlit模板,关于streamlit,请访问:

Streamlit • A faster way to build and share data apps

 该模板可以访问MySql数据库,稍作更改后也可以访问其他数据库用于内容展示。

模板样式

代码实现

为了代码清晰,文中使用两个py文件,主程序命名为app.py,具体页面放置在pages.py中,通过函数封装。

app.py

# app.py

import streamlit as st
import time
from pages import home_page,data_display_page,plot_page,information_tb

# 页面设置
st.set_page_config(
    page_title="Jays Data Base",
    page_icon="🖥️",
    layout="wide",
    initial_sidebar_state="expanded"
)

# 显示加载中的占位符
def display_loading(message="页面加载中..."):
    with st.spinner(message):
        time.sleep(1.5)  # 模拟加载过程
#-----------------------------------------------
#以下为展示内容---
#-----------------------------------------------
# 边栏导航
st.sidebar.header("🖥️ 导航")
page = st.sidebar.selectbox("请选择内容🖱️", ["主页", "数据展示", "图形绘制",'信息展示'])

# 根据页面选择显示相应的内容
if page == "主页":
    display_loading("主页加载中...")
    home_page()
elif page == "数据展示":
    data_display_page()
elif page == "图形绘制":
    display_loading("绘图页面加载中...")
    plot_page()
elif page == '信息展示':
    display_loading("绘图页面加载中...")
    information_tb()
#-----------------------------------------------
#以上为展示内容---
#-----------------------------------------------

# 自定义CSS样式
st.markdown("""
    <style>
    .css-18e3th9 {
        font-size: 20px;
        font-weight: 600;
    }
    .css-1aumxhk {
        font-size: 18px;
    }
    .css-1q8dd3e {
        font-size: 16px;
    }
    .css-10trblm {
        padding: 20px;
    }
    </style>
""", unsafe_allow_html=True)

pages.py

# pages.py

import pandas as pd
import plotly.express as px
import time
import streamlit as st
from sqlalchemy import create_engine

# 创建数据库引擎
def get_engine():
    return create_engine('mysql+mysqlconnector://username:yourpassword@localhost/your database name')

# 显示加载中的占位符
def display_loading(message="页面加载中..."):
    with st.spinner(message):
        time.sleep(2)  # 模拟加载过程

#-----------------------------------------------
#以上内容为如无特别需要无需修改(初始化时需要配置数据库)
#-----------------------------------------------

# 主页内容
def home_page():
    st.markdown('# Jays Data Base')
    col1, col2 = st.columns(2)
    st.write('Welcome to my Github homepage or CSDN homepage!')
    with col1:
        st.link_button('Github',url='https://github.com/JaysDataBase') # 链接你的相关主页,这里的网址仅为示例网址
    with col2:
        st.link_button('CSDN',url='https://blog.csdn.net/JaysDataBase')
    st.markdown('''
    ## 😁
    ### 欢迎访问本数据库!
    本数据库由 Jay 整理制作,用于管理一些有用的信息。
    
    ## This section contains:
    ''')

    col1, col2 = st.columns(2)#填入需要的列,使用with调用各列,如:
    with col1:
        st.markdown('### InformationTB')
        st.write('We try to collect important information '
                 'form the Websites,papers and so on and write them in our DataBase.')
    with col2:
        st.markdown('### ProperNone')
        st.write('Some important words and phrases is collected in this section.')
# 数据展示页面内容
def data_display_page():
    st.markdown('''
    # ⚛️ 数据
    ''')
    table_names = ["table1", "table2", "table3"]
    selected_table = st.selectbox("选择要显示的数据表:", table_names)

    # 显示加载进度条
    progress_bar = st.progress(0)

    try:
        # 创建 SQLAlchemy 引擎
        engine = get_engine()
        query = f"SELECT * FROM {selected_table}"

        # 模拟加载过程,逐步更新进度条
        for i in range(10):
            time.sleep(0.1)
            progress_bar.progress(i * 10)

        # 读取数据到 DataFrame
        df = pd.read_sql(query, engine)

        # 显示行数和数据框
        st.metric(label="💽本数据表包含的数据量为:", value=len(df))
        st.markdown(f"## 以下是来自 `{selected_table}` 表的数据:")
        st.dataframe(df)

    except Exception as e:
        st.error(f"发生错误: {e}")

    progress_bar.empty()
    st.success("数据加载完成!")

# 绘图页面内容
def plot_page():
    st.markdown('''
    # 📈 图形
    ''')
    # 示例交互式折线图
    st.markdown("### 示例交互式折线图")

    # 创建一个示例数据集
    sample_data = {
        '日期': pd.date_range(start='2023-01-01', periods=10, freq='D'),
        '文献数量': [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],
    }

    df_plot = pd.DataFrame(sample_data)

    # 使用 plotly 绘制交互式图表
    fig = px.line(df_plot, x='日期', y='文献数量', title='文献数量随时间变化')
    fig.update_layout(
        title='文献数量随时间变化',
        xaxis_title='日期',
        yaxis_title='文献数量',
        template='plotly_dark',
    )

    # 显示交互式图表
    st.plotly_chart(fig, use_container_width=True)

    st.markdown("""
    这是一份交互式折线图,展示了文献数量随时间的变化。你可以通过图表进行缩放、拖动等交互操作。
    """)

# InformationTB
def information_tb():
    st.markdown('''
    # 🔬 InformationTB
    ## 🖱️Please choose the item:
    ''')
    table = 'your table name'
    query = f"SELECT * FROM {table}"

    try:
        # 创建 SQLAlchemy 引擎
        engine = get_engine()
        df = pd.read_sql(query, engine)
        # 创建一个 selectbox,其选项是 DataFrame 的第一列
        selected_option = st.selectbox('Please choose:', df['the column you need'])

        # 根据用户的选择从 DataFrame 中找到对应的值
        corresponding_value = df.loc[df['the column you need'] == selected_option, 'content'].iloc[0]

        col1,col2 = st.columns(2)
        with col1:
            st.metric("**The number of entries recorded in this database is**:",value=len(df))
        with col2:
            st.markdown(f'''
            **The current selection is**:
            
            {selected_option}
            ''')

        current_df = df[df['the column you need'] == selected_option][['column1', 'column2', 'column3', 'column4']]
        st.table(current_df)
        st.markdown('<hr>', unsafe_allow_html=True)
        # 输出选中的值
        st.markdown('## 🛢️Details:')
        st.markdown(corresponding_value)
    except Exception as e:
        st.error(f"发生错误: {e}")

 代码说明

本文使用 Streamlit 创建了一个 Web 应用程序,它集成了多个页面和功能,用于展示数据、绘制图表、以及从数据库中提取信息。下面是代码的主要部分及其解释:

导入库和设置

  • 导入了必要的库,如 `streamlit` 用于创建Web应用,`time` 用于模拟加载过程中的延迟。
  • 设置了页面配置,包括页面标题、图标、布局等。

显示加载中的占位符

  • 定义了一个名为 `display_loading` 的函数,用于在页面加载时显示一个旋转的加载图标,并可自定义加载信息。

边栏导航

  • 使用 `st.sidebar.selectbox` 创建了一个选择框,用户可以从中选择要访问的页面(主页、数据展示、图形绘制、信息展示)。

根据页面选择显示相应的内容

  • 根据用户在边栏的选择,调用相应的页面函数 (`home_page`, `data_display_page`, `plot_page`, `information_tb`) 来展示内容。

自定义CSS样式

  • 通过 `st.markdown` 和 HTML `<style>` 标签插入了一些自定义CSS,以改变Streamlit组件的默认样式。

主页内容 (`home_page` 函数)

  • 显示欢迎信息,包含两个链接按钮指向外部网站(GitHub 和 CSDN),并介绍数据库的内容。

数据展示页面内容 (`data_display_page` 函数)

  • 提供了一个下拉菜单让用户选择要查看的数据表,并展示了所选表格的数据。

绘图页面内容 (`plot_page` 函数)

  • 创建了一个交互式的折线图,用来展示示例数据随时间的变化情况。

信息展示页面 (`information_tb` 函数)

  • 从数据库中读取特定表格的数据,并允许用户选择不同的选项来查看对应的详细信息。

请注意,代码中的某些地方使用了占位符文本(例如数据库连接字符串中的用户名、密码和数据库名),你需要将其替换为实际值才能让应用程序正常工作。

<think>好的,我需要回答用户关于Streamlit web开发框架的使用指南的问题。首先,我要整理用户提供的引用内容,确保引用信息正确融入回答中。根据用户提供的三个引用,引用[1]提到Streamlit组件模板的安装和使用,引用[2]涉及数据可视化和MySQL交互,引用[3]是关于本地部署Llama模型的步骤。 接下来,我需要按照用户的要求,结构清晰地分步骤说明Streamlit的使用方法。可能需要包括快速入门、核心功能、进阶应用和优化技巧几个部分。每个部分下需要具体的小点,例如安装、创建应用、运行应用,以及如何添加组件、处理数据等。 要注意所有行内数学表达式用$...$格式,但在这个问题中可能涉及较少数学内容,主要关注代码和框架使用。需要确保生成的Python代码块正确,并符合Streamlit的语法。同时,要生成相关问题,可能需要包括Streamlit的组件开发、数据可视化技巧、部署优化等方向的问题。 需要检查是否有遗漏的要点,比如引用[3]中的模型下载和部署部分,可能需要作为进阶应用的一个例子。同时,引用[2]提到的解决持续刷新问题,应该放在优化技巧里。确保每个引用在回答中都有对应的引用标识,如[^1]、[^2]、[^3]。 最后,生成的相关问题要围绕Streamlit的不同方面,比如性能优化、组件开发、数据交互等,确保问题具有针对性和实用性。整个过程要保持回答的中文,结构清晰,步骤分明,符合用户的要求。</think>### Streamlit Web开发框架使用指南 Streamlit一个用于快速构建数据科学和机器学习 Web 应用的 Python 框架,支持通过简单脚本实现交互式可视化。以下是具体使用步骤: --- #### 一、快速入门 1. **安装环境** ```bash pip install streamlit ``` 验证安装:`streamlit hello` 会展示示例应用[^1] 2. **创建首个应用** ```python # app.py import streamlit as st st.title("我的第一个Streamlit应用") st.write("实时数据显示:", [i**2 for i in range(10)]) ``` 运行命令:`streamlit run app.py` 3. **核心组件** - 动态控件:`st.slider()`、`st.button()` - 数据展示:`st.dataframe()`、`st.line_chart()` - 多媒体:`st.image()`、`st.audio()` --- #### 二、核心功能实现 1. **交互式表单** ```python with st.form("user_input"): name = st.text_input("姓名") submitted = st.form_submit_button("提交") if submitted: st.write(f"欢迎, {name}!") ``` 2. **数据可视化(结合PyEcharts)** ```python from pyecharts.charts import Bar bar = Bar().add_xaxis(["A","B","C"]).add_yaxis("数据", [10,20,15]) st_pyecharts(bar) # 需安装streamlit-echarts组件[^2] ``` 3. **数据库连接(MySQL示例)** ```python import mysql.connector conn = mysql.connector.connect(**st.secrets["mysql"]) cursor = conn.cursor() cursor.execute("SELECT * FROM sales") st.table(cursor.fetchall()) ``` --- #### 三、进阶应用场景 1. **自定义组件开发** 使用组件模板创建可复用的 UI 模块: ```bash git clone https://github.com/streamlit/component-template cd component-template npm install # 前端依赖[^1] ``` 2. **模型部署(以Llama3.1-8B为例)** ```python # model_download.py from modelscope import snapshot_download model_dir = snapshot_download('Meta-Llama-3.1-8B', cache_dir='/data') # 需15GB空间[^3] ``` --- #### 四、优化技巧 1. **解决页面持续刷新问题** - 使用`st.session_state`保存状态 - 通过`@st.cache_data`缓存计算密集型任务[^2] 2. **性能提升方案** ```python @st.cache_resource # 资源缓存 def load_large_model(): return AutoModel.from_pretrained("/path/to/model") ``` --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值