我正在尝试在我的 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 的作用,即使在重新运行后它也会存储一个值。但我不明白语法以及如何声明要保存的内容以及在什么情况下保存。
我将不胜感激任何帮助!非常感谢。
我尝试了几种方法来声明 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>