Streamlit连接Google Sheets。
项目描述
Streamlit GSheetsConnection
从Streamlit应用程序连接到公共或私有Google Sheets。由st.connection()
和gspread提供。
GSheets连接有两种模式
- 在只读模式下,使用公开共享的电子表格URL(只读模式)
- CRUD操作支持模式,使用服务账户进行身份验证。要使用服务账户模式,您需要在Google开发者控制台中启用Google Drive和Google Sheets API。按照“CRUD模式初始设置”部分,首先对Streamlit应用程序进行身份验证。
安装
pip install st-gsheets-connection
最小示例:公开共享的电子表格(只读)
# example/st_app.py
import streamlit as st
from streamlit_gsheets import GSheetsConnection
url = "https://docs.google.com/spreadsheets/d/1JDy9md2VZPz4JbYtRPJLs81_3jUK47nx6GYQjgU8qNY/edit?usp=sharing"
conn = st.connection("gsheets", type=GSheetsConnection)
data = conn.read(spreadsheet=url, usecols=[0, 1])
st.dataframe(data)
服务账户/CRUD示例
私有电子表格和/或CRUD模式的初始设置
- 在您的Streamlit应用根目录中设置
.streamlit/secrets.toml
,有关参考请参阅秘密管理文档。 - 为项目启用API访问
- 前往Google开发者控制台,创建一个新的项目(或选择您已有的项目)。
- 在“搜索API和服务”的框中搜索“Google Drive API”并启用它。
- 在“搜索API和服务”的框中搜索“Google Sheets API”并启用它。
- 使用服务帐户
- 如果您还没有这样做,请为项目启用API访问。
- 转到“APIs & Services > Credentials”并选择“创建凭据 > 服务帐户密钥”。
- 填写表格
- 点击“创建”和“完成”。
- 在服务帐户上方点击“管理服务帐户”。
- 在最近创建的服务帐户附近点击⋮,然后选择“管理密钥”,接着点击“添加密钥 > 创建新密钥”。
- 选择JSON密钥类型并点击“创建”。
您将自动下载一个包含凭据的JSON文件。它可能看起来像这样
{
"type": "service_account",
"project_id": "api-project-XXX",
"private_key_id": "2cd … ba4",
"private_key": "-----BEGIN PRIVATE KEY-----\nNrDyLw … jINQh/9\n-----END PRIVATE KEY-----\n",
"client_email": "473000000000-yoursisdifferent@developer.gserviceaccount.com",
"client_id": "473 … hd.apps.googleusercontent.com",
...
}
请记住已下载凭据文件的路径。另外,在下一步中,您将需要此文件中client_email的值。
- 非常重要! 前往您的电子表格,并使用上一步中的client_email与客户共享。就像您与其他任何Google帐户一样。如果不这样做,当您尝试从应用程序或脚本访问此电子表格时,您将收到一个
gspread.exceptions.SpreadsheetNotFound
异常。
- 在
streamlit/secrets.toml
中放置下载的JSON文件中的service_account
配置,格式如下(其中gsheets
是您的st.connection
名称)
# .streamlit/secrets.toml
[connections.gsheets]
spreadsheet = "<spreadsheet-name-or-url>"
worksheet = "<worksheet-gid-or-folder-id>" # worksheet GID is used when using Public Spreadsheet URL, when usign service_account it will be picked as folder_id
type = "" # leave empty when using Public Spreadsheet URL, when using service_account -> type = "service_account"
project_id = ""
private_key_id = ""
private_key = ""
client_email = ""
client_id = ""
auth_uri = ""
token_uri = ""
auth_provider_x509_cert_url = ""
client_x509_cert_url = ""
代码
# example/st_app_gsheets_using_service_account.py
import streamlit as st
from streamlit_gsheets import GSheetsConnection
st.title("Read Google Sheet as DataFrame")
conn = st.connection("gsheets", type=GSheetsConnection)
df = conn.read(worksheet="Example 1")
st.dataframe(df)
# .streamlit/secrets.toml
[connections.gsheets]
spreadsheet = "<spreadsheet-name-or-url>"
worksheet = "<worksheet-gid-or-folder-id>" # worksheet GID is used when using Public Spreadsheet URL, when usign service_account it will be picked as folder_id
type = "" # leave empty when using Public Spreadsheet URL, when using service_account -> type = "service_account"
project_id = ""
private_key_id = ""
private_key = ""
client_email = ""
client_id = ""
auth_uri = ""
token_uri = ""
auth_provider_x509_cert_url = ""
client_x509_cert_url = ""
# requirements.txt
streamlit==1.22
git+https://github.com/streamlit/gsheets-connection
pandasql # this is for example/st_app.py only
完整示例
检查gsheets_connection/example目录以获取完整的使用示例。
问答
-
这对于没有认证细节的公共电子表格有效吗?还是只有私有电子表格?
GSheets连接有两种模式
- 在只读模式下,使用公开共享的电子表格URL(只读模式)
- CRUD操作支持模式,使用服务账户进行身份验证。要使用服务账户模式,您需要在Google开发者控制台中启用Google Drive和Google Sheets API。按照“CRUD模式初始设置”部分,首先对Streamlit应用程序进行身份验证。