Connect Streamlit to MySQL

本指南解释了如何从Streamlit Community Cloud安全地访问远程 MySQL数据库。它使用了st.connection和Streamlit的Secrets management。以下示例代码仅在Streamlit版本 >= 1.28时有效,因为st.connection是在该版本中添加的。

push_pin

注意

如果您已经有一个想要使用的数据库,请随时跳到下一步

首先,按照本教程安装MySQL并启动MySQL服务器(记下用户名和密码!)。一旦你的MySQL服务器启动并运行,使用mysql客户端连接到它,并输入以下命令来创建一个数据库和一个包含一些示例值的表:

CREATE DATABASE pets; USE pets; CREATE TABLE mytable ( name varchar(80), pet varchar(80) ); INSERT INTO mytable VALUES ('Mary', 'dog'), ('John', 'cat'), ('Robert', 'bird');

您的本地 Streamlit 应用程序将从应用程序根目录中的文件 .streamlit/secrets.toml 读取密钥。了解更多关于 Streamlit 密钥管理的信息。如果此文件尚不存在,请创建此文件,并添加您的 MySQL 服务器的数据库名称、用户和密码,如下所示:

# .streamlit/secrets.toml [connections.mysql] dialect = "mysql" host = "localhost" port = 3306 database = "xxx" username = "xxx" password = "xxx" query = { charset = "xxx" }

如果在定义连接时使用query,则必须使用streamlit>=1.35.0

priority_high

重要

将您的应用密钥复制到Streamlit Community Cloud时,请确保将hostportdatabaseusernamepassword的值替换为您的远程 MySQL数据库的值!

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

由于上面的secrets.toml文件没有提交到GitHub,你需要将其内容单独传递给你部署的应用程序(在Streamlit社区云上)。转到应用程序仪表板,在应用程序的下拉菜单中,点击编辑Secrets。将secrets.toml的内容复制到文本区域。更多信息可在Secrets管理中找到。

Secrets manager screenshot

mysqlclientSQLAlchemy包添加到您的requirements.txt文件中,最好固定其版本(将x.x.x替换为您想要安装的版本):

# requirements.txt mysqlclient==x.x.x SQLAlchemy==x.x.x

将下面的代码复制到您的Streamlit应用程序中并运行它。确保调整query以使用您的表名。

# streamlit_app.py import streamlit as st # Initialize connection. conn = st.connection('mysql', type='sql') # Perform query. df = conn.query('SELECT * from mytable;', ttl=600) # Print results. for row in df.itertuples(): st.write(f"{row.name} has a :{row.pet}:")

看到上面的st.connection了吗?它处理密钥检索、设置、查询缓存和重试。默认情况下,query()的结果会被缓存且不会过期。在这种情况下,我们设置了ttl=600以确保查询结果的缓存时间不超过10分钟。你也可以设置ttl=0来禁用缓存。了解更多信息,请访问Caching

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

Finished app screenshot
forum

还有问题吗?

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