Connect Streamlit to a public Google Sheet
Introduction
本指南解释了如何从Streamlit安全地访问公共Google Sheet。它使用了st.connection、Streamlit GSheetsConnection和Streamlit的Secrets management。
此方法要求您为您的Google表格启用链接共享。虽然共享链接不会出现在您的代码中(实际上它有点像密码!),但拥有该链接的人可以获取表格中的所有数据。如果您不希望这样,请按照(更复杂的)指南将Streamlit连接到私有Google表格。
Prerequisites
本教程要求您的Python环境中安装有streamlit>=1.28和st-gsheets-connection。
Create a Google Sheet and turn on link sharing
如果您已经有一个想要访问的Sheet,您可以跳到下一步。有关如何共享电子表格的更多信息,请参阅Google的文档。
创建一个包含此示例数据的电子表格,并创建一个共享链接。链接应设置为“任何拥有链接的人”作为“查看者”。
| 名字 | 宠物 |
|---|---|
| 玛丽 | 狗 |
| 约翰 | 猫 |
| 罗伯特 | 鸟 |


Add the Sheets URL to your local app secrets
您的本地Streamlit应用程序将从应用程序根目录中的文件.streamlit/secrets.toml读取秘密信息。如果此文件尚不存在,请创建它,并将您的Google表格的共享链接添加到其中,如下所示:
# .streamlit/secrets.toml
[connections.gsheets]
spreadsheet = "https://docs.google.com/spreadsheets/d/xxxxxxx/edit#gid=0"
重要
将此文件添加到.gitignore中,不要将其提交到你的GitHub仓库!
Write your Streamlit app
将下面的代码复制到您的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=3供pandas在内部使用。
如果一切顺利(并且你使用了我们上面创建的示例表),你的应用程序应该看起来像这样:

Connecting to a Google Sheet from Community Cloud
本教程假设使用本地Streamlit应用程序,但您也可以从社区云托管的应用程序连接到Google Sheets。主要附加步骤如下:
- 包含依赖项信息 使用一个
requirements.txt文件,其中包含st-gsheets-connection和其他任何依赖项。 - Add your secrets 到你的社区云应用程序中。
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。