My app is designed to retrieve data when a button is clicked. However, it returns old data from the day I first deployed.
Is there a command to force Streamlit’s refresh to run the command anew? I believe it does not run because there has not been a change to the source code during the refresh.
import requests
if st.button('Execute'):
url = "https://content.json"
r = requests.request("GET", url)
data = r.json()
...
Are you caching your requests function anywhere in your code?
Here is an example of how the aching works and returns the same results if the input is unchanged:
import requests
import streamlit as st
@st.cache_data
def fetch_data():
URL = "https://official-joke-api.appspot.com/random_joke"
response = requests.get(URL)
data = response.json()
return data
if st.button('Fetch Joke'):
with st.spinner('Fetching joke...'):
joke = fetch_data()
st.write(joke['setup'])
st.success(joke['punchline'])
Here’s the same code without the caching mechanism which will update each time the Fetch Joke button is clicked:
import requests
import streamlit as st
def fetch_data():
URL = "https://official-joke-api.appspot.com/random_joke"
response = requests.get(URL)
data = response.json()
return data
if st.button('Fetch Joke'):
with st.spinner('Fetching joke...'):
joke = fetch_data()
st.write(joke['setup'])
st.success(joke['punchline'])
Thanks for the reply @tonykip. I was not caching the request, but the problem seems to have gone away. The request is now pulling live data with each execution. Thanks again.