Connect Streamlit to PostgreSQL
Introduction
本指南解释了如何从Streamlit社区云安全地访问远程PostgreSQL数据库。它使用了st.connection和Streamlit的Secrets管理。以下示例代码仅在Streamlit版本>= 1.28时有效,因为st.connection
是在该版本中添加的。
Create a PostgreSQL database
注意
如果您已经有一个想要使用的数据库,请随时跳到下一步。
首先,按照本教程安装PostgreSQL并创建一个数据库(记下数据库名称、用户名和密码!)。打开SQL Shell(psql
)并输入以下两个命令以创建一个包含一些示例值的表:
CREATE TABLE mytable (
name varchar(80),
pet varchar(80)
);
INSERT INTO mytable VALUES ('Mary', 'dog'), ('John', 'cat'), ('Robert', 'bird');
Add username and password to your local app secrets
您的本地 Streamlit 应用程序将从应用程序根目录中的文件 .streamlit/secrets.toml
读取密钥。如果该文件尚不存在,请创建此文件,并添加数据库的名称、用户和密码,如下所示:
# .streamlit/secrets.toml
[connections.postgresql]
dialect = "postgresql"
host = "localhost"
port = "5432"
database = "xxx"
username = "xxx"
password = "xxx"
重要
将您的应用密钥复制到Streamlit Community Cloud时,请确保将host、port、database、username和password的值替换为您的远程 PostgreSQL数据库的值!
将此文件添加到.gitignore
,不要将其提交到你的GitHub仓库!
Copy your app secrets to the cloud
由于上面的secrets.toml
文件没有提交到GitHub,你需要将其内容单独传递给你部署的应用程序(在Streamlit社区云上)。转到应用程序仪表板,在应用程序的下拉菜单中,点击编辑Secrets。将secrets.toml
的内容复制到文本区域。更多信息可在Secrets管理中找到。

Add dependencies to your requirements file
将psycopg2-binary和SQLAlchemy包添加到您的requirements.txt
文件中,最好固定其版本(将x.x.x
替换为您想要安装的版本):
# requirements.txt
psycopg2-binary==x.x.x
sqlalchemy==x.x.x
Write your Streamlit app
将下面的代码复制到您的Streamlit应用程序中并运行它。确保调整query
以使用您的表名。
# streamlit_app.py
import streamlit as st
# Initialize connection.
conn = st.connection("postgresql", type="sql")
# Perform query.
df = conn.query('SELECT * FROM mytable;', ttl="10m")
# Print results.
for row in df.itertuples():
st.write(f"{row.name} has a :{row.pet}:")
看到上面的st.connection
了吗?它处理秘密检索、设置、查询缓存和重试。默认情况下,query()
的结果会被缓存且不会过期。在这种情况下,我们设置ttl="10m"
以确保查询结果的缓存时间不超过10分钟。你也可以设置ttl=0
来禁用缓存。了解更多信息,请访问Caching。
如果一切顺利(并且你使用了我们上面创建的示例表),你的应用程序应该看起来像这样:

还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。