Connect Streamlit to a public Google Sheet

本指南解释了如何从Streamlit安全地访问公共Google Sheet。它使用了st.connectionStreamlit GSheetsConnection和Streamlit的Secrets management

此方法要求您为您的Google表格启用链接共享。虽然共享链接不会出现在您的代码中(实际上它有点像密码!),但拥有该链接的人可以获取表格中的所有数据。如果您不希望这样,请按照(更复杂的)指南将Streamlit连接到私有Google表格

本教程要求您的Python环境中安装有streamlit>=1.28st-gsheets-connection

如果您已经有一个想要访问的Sheet,您可以跳到下一步。有关如何共享电子表格的更多信息,请参阅Google的文档。

创建一个包含此示例数据的电子表格,并创建一个共享链接。链接应设置为“任何拥有链接的人”作为“查看者”。

名字宠物
玛丽
约翰
罗伯特
screenshot 1
screenshot 1

您的本地Streamlit应用程序将从应用程序根目录中的文件.streamlit/secrets.toml读取秘密信息。如果此文件尚不存在,请创建它,并将您的Google表格的共享链接添加到其中,如下所示:

# .streamlit/secrets.toml [connections.gsheets] spreadsheet = "https://docs.google.com/spreadsheets/d/xxxxxxx/edit#gid=0"
priority_high

重要

将此文件添加到.gitignore中,不要将其提交到你的GitHub仓库!

将下面的代码复制到您的Streamlit应用程序中并运行它。

# streamlit_app.py import streamlit as st from streamlit_gsheets import GSheetsConnection # Create a connection object. conn = st.connection("gsheets", type=GSheetsConnection) df = conn.read() # Print results. for row in df.itertuples(): st.write(f"{row.name} has a :{row.pet}:")

看到上面的st.connection了吗?它处理密钥检索、设置、查询缓存和重试。默认情况下,.read()的结果会被缓存且不会过期。你可以传递可选参数给.read()来自定义你的连接。例如,你可以指定工作表的名称、缓存过期时间,或者像这样传递pandas.read_csv的参数:

df = conn.read( worksheet="Sheet1", ttl="10m", usecols=[0, 1], nrows=3, )

在这种情况下,我们设置ttl="10m"以确保查询结果缓存不超过10分钟。你也可以设置ttl=0来禁用缓存。了解更多信息,请访问Caching。我们已经声明了可选参数usecols=[0,1]nrows=3pandas在内部使用。

如果一切顺利(并且你使用了我们上面创建的示例表),你的应用程序应该看起来像这样:

Finished app screenshot

本教程假设使用本地Streamlit应用程序,但您也可以从社区云托管的应用程序连接到Google Sheets。主要附加步骤如下:

forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。