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

Streamlit 1.12.0版本清除缓存报错问题求助

Streamlit 1.12.0 清除缓存及缓存装饰器适配方案

问题根源

Streamlit从1.10.0版本开始,彻底移除了st.legacy_caching模块,同时旧的@st.cache装饰器也被标记为废弃,改用新的缓存API体系,这就是你报错的原因。

解决方案分两步:

1. 替换旧的缓存装饰器

将原来的@st.cache替换为@st.cache_data(你的函数返回DataFrame这类数据,属于数据缓存场景),同时移除不再需要的allow_output_mutation=True参数(新API原生支持可变对象缓存逻辑),suppress_st_warning=True也可一并去掉:

修改后的加载函数代码:

@st.cache_data
def load_General():
    engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
    con=engine.connect()
    general_query_raw='''string'''
    General_raw=pd.read_sql(general_query_raw,con)
    
    general_query_cleansed='''string'''
    General_cleansed=pd.read_sql(general_query_cleansed,con)
    return General_raw, General_cleansed


@st.cache_data
def load_Role():
    engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
    con=engine.connect()
    role_query_raw='''string'''
    Role_raw=pd.read_sql(role_query_raw,con)
    
    role_query_cleansed='''string'''
    Role_cleansed=pd.read_sql(role_query_cleansed,con)  
    return Role_raw,Role_cleansed

2. 更新清除缓存的代码

用新的st.cache_data.clear()方法替换原来的st.legacy_caching.caching.clear_cache(),修改后的按钮逻辑:

def clear_cache():
    st.cache_data.clear()

st.sidebar.button("Refresh Program", on_click=clear_cache)

额外说明

如果你的代码中还有缓存资源(比如数据库连接池、模型实例这类非数据对象)的场景,需要用@st.cache_resource装饰器,对应的清除方法是st.cache_resource.clear()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:50:24