You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Streamlit应用部署至Snowflake并参数化Snowflake凭证?

部署Streamlit应用到Snowflake

前提准备

  • 确保你拥有具备STREAMLIT_ADMIN或ACCOUNTADMIN权限的角色,同时已创建好应用所需的数据库、Schema和Warehouse。
  • 确认目标数据库和Schema下已创建好用于存储应用文件的Internal Stage(如果没有,先执行CREATE STAGE IF NOT EXISTS your_streamlit_stage;)。

创建Streamlit应用对象

执行以下SQL命令创建应用,指定入口文件为main.py,并关联之前创建的Stage:

CREATE STREAMLIT your_streamlit_app
    ROOT_LOCATION = '@your_streamlit_stage'
    MAIN_FILE = '/main.py'
    QUERY_WAREHOUSE = 'your_warehouse_name'
    COMMENT = 'Streamlit app for Snowflake table edit';

配置应用访问权限

给需要访问应用的用户或角色授予权限:

GRANT USAGE ON STREAMLIT your_streamlit_app TO ROLE your_user_role;
GRANT USAGE ON WAREHOUSE your_warehouse_name TO ROLE your_user_role;
上传代码文件到Snowflake Internal Stage

方法1:通过Snowflake Web UI上传

  1. 进入Snowflake控制台,导航到目标数据库和Schema下的Stage。
  2. 点击Upload Files,选择本地的main.py、params.py文件,以及pages文件夹。
  3. 确保上传后文件结构保持一致:pages/app.py需存放在Stage的pages目录下。

方法2:通过SQL命令(PUT)上传

在本地终端或Snowflake Worksheet中执行以下命令(替换本地文件路径和Stage名称):

-- 上传单文件
PUT file:///your_local_path/main.py @your_streamlit_stage auto_compress=false;
PUT file:///your_local_path/params.py @your_streamlit_stage auto_compress=false;

-- 递归上传pages目录下的所有文件
PUT file:///your_local_path/pages/* @your_streamlit_stage/pages auto_compress=false;

注意:auto_compress=false必须添加,否则Snowflake会自动压缩文件,导致Streamlit无法正常读取。

参数化params.py中的Snowflake凭证

步骤1:创建Snowflake Secret存储凭证

执行SQL命令创建Secret,存储Snowflake连接所需的参数:

CREATE SECRET IF NOT EXISTS your_snowflake_creds
    TYPE = PASSWORD
    USERNAME = 'your_snowflake_user'
    PASSWORD = 'your_snowflake_password'
    COMMENT = 'Credentials for Streamlit app';

-- 补充其他连接参数
ALTER SECRET your_snowflake_creds SET TAG (ACCOUNT='your_account_id', WAREHOUSE='your_warehouse', DATABASE='your_db', SCHEMA='your_schema');

步骤2:修改params.py读取Secret

将原来硬编码的凭证替换为从Snowflake Secret中读取,示例代码如下:

import snowflake.connector

def get_snowflake_connection():
    return snowflake.connector.connect(
        account="$SECRET(your_snowflake_creds, ACCOUNT)",
        user="$SECRET(your_snowflake_creds, USERNAME)",
        password="$SECRET(your_snowflake_creds, PASSWORD)",
        warehouse="$SECRET(your_snowflake_creds, WAREHOUSE)",
        database="$SECRET(your_snowflake_creds, DATABASE)",
        schema="$SECRET(your_snowflake_creds, SCHEMA)"
    )

步骤3:授予应用角色读取Secret的权限

确保运行Streamlit应用的角色拥有Secret的访问权限:

GRANT USAGE ON SECRET your_snowflake_creds TO ROLE your_streamlit_role;

内容的提问来源于stack exchange,提问作者Ameer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 13:33:39