远程滑块上的 Streamlit session_state 问题

问题描述 投票:0回答:1

我正在尝试在我的 Streamlit 应用程序中实现一个范围滑块。它应该定义在网站下面显示哪些内容。更准确地说,我想显示用“日期”值存储的文本,显示何时发布此特定文本。我正在查询 SQL 数据库来定义滑块应呈现为 min_value 和 max_ value 的范围。但使用滑块时,应用程序重新运行后会重新建立默认值。

我从以下 SQL 查询开始:

cursor = connection.cursor()
query = "SELECT MIN(scheduled_pub) FROM tbl_article;"
cursor.execute(query)
oldest_date = cursor.fetchone()[0]
cursor.close()
    
today = datetime.now()

现在我将这两个日期作为参数传递给我的范围滑块,默认情况下显示从我的第一个数据库条目到今天的每个日期。

range_selected = st.slider(label="range",
                           min_value=oldest_date,
                           max_value=today,
                           value=(oldest_date, today))

运行应用程序时,滑块按预期显示,但一旦我更改两个值之一,应用程序就会重新运行并将该值重置为默认值。我认为这是因为 SQL 查询再次被处理并且变量再次设置为这些值。 我知道 session_state 的功能,但我不太明白它。所有文档和教程都展示了如何将 session_state 与按钮一起使用。我尝试了几种方法来声明

if "range" not in session_state:
和我在某处找到的其他代码片段,但我无法让应用程序按预期运行,这让我发疯。我明白 session_state 的作用,即使在重新运行后它也会存储一个值。但我不明白语法以及如何声明要保存的内容以及在什么情况下保存。

我将不胜感激任何帮助!非常感谢。

python slider session-state streamlit
1个回答
0
投票

我尝试了几种方法来声明 if“range”不在 session_state: 中以及我在某处找到的其他代码片段,但我无法让应用程序按预期运行,这让我发疯。我明白 session_state 的作用,即使在重新运行后它也会存储一个值。但我不明白语法以及如何声明要保存的内容以及在什么情况下保存。

if
语句是您在脚本开头初始化会话状态值的方式 - 例如:

if "range" not in st.session_state:
   st.session_state.range = <your desired default value>

要稍后在脚本中更新

range
的值,您可以使用以下语法:

st.session_state.range = <your desired range value>

您还可以使用以下语法:

st.session_state['range'] = <your desired range value>
© www.soinside.com 2019 - 2024. All rights reserved.