Beispiel: Erstellen eines Formulars, das in Snowflake schreibt

Dieses Beispiel führt Sie durch die Erstellung einer Streamlit in Snowflake-App, die Benutzereingaben über ein Formular sammelt und sie in eine Snowflake-Tabelle schreibt. Die App liest auch die Daten zurück, um alle Einträge anzuzeigen, und verwendet st.user, um zu verfolgen, wer jeden Eintrag eingereicht hat.

Die App verwendet eine Container-Laufzeit. Bevor Sie beginnen, vergewissern Sie sich, dass Sie die Voraussetzungen abgeschlossen haben.

Zieltabelle einrichten

Dieses Beispiel verwendet eine Datenbank namens crud_demo. Sie können jede Datenbank und jedes Schema, auf das Sie Zugriff haben, ersetzen. Aktualisieren Sie einfach die Referenzen im SQL- und App-Code für den Abgleich.

Erstellen Sie eine Tabelle, um Formulardaten zu speichern. Führen Sie folgende SQL in einem Arbeitsblatt oder einer SQL-Sitzung aus:

CREATE OR REPLACE TABLE crud_demo.public.feedback (
   submitted_at TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP(),
   submitted_by VARCHAR,
   category VARCHAR,
   rating INTEGER,
   comments VARCHAR
);

App-Code schreiben

Erstellen Sie auf Ihrem lokalen Computer eine Datei namens streamlit_app.py mit dem folgenden Code. Wenn Sie Snowsight verwenden möchten, können Sie diesen Code in den Editor einfügen, nachdem Sie die App erstellt haben.

import streamlit as st

st.title("Feedback Form")
st.write(f"Logged in as: {st.user.user_name}")

conn = st.connection("snowflake")
session = conn.session()

with st.form("feedback_form"):
    category = st.selectbox(
        "Category", ["Bug Report", "Feature Request", "General Feedback"]
    )
    rating = st.slider("Rating", 1, 5, 3)
    comments = st.text_area("Comments")
    submitted = st.form_submit_button("Submit")

if submitted:
    session.sql(
        """
        INSERT INTO crud_demo.public.feedback
            (submitted_by, category, rating, comments)
        VALUES (?, ?, ?, ?)
        """,
        params=[st.user.user_name, category, rating, comments],
    ).collect()
    st.success("Feedback submitted!")

st.subheader("Last 10 submissions")
data = session.sql(
    "SELECT * FROM crud_demo.public.feedback ORDER BY submitted_at DESC LIMIT 10"
).to_pandas()
st.dataframe(data, use_container_width=True)

Diese App verwendet:

  • st.form, um Eingaben vor dem Senden zu sammeln und so zu verhindern, dass bei jeder Widget-Interaktion eine Wiederholung erfolgt.

  • st.connection("snowflake").session(), um eine Snowpark-Sitzung zum Schreiben von Daten zu erhalten. Weitere Informationen dazu finden Sie unter Verwalten von Geheimnissen und Konfigurieren der Streamlit-App.

  • session.sql() anstelle von:code:conn.query(), um die Einträge zurückzulesen. conn.query() speichert Ergebnisse standardmäßig im Cache, sodass neue Einträge erst nach Ablauf des Cache angezeigt werden. session.sql() führt bei jeder Wiederholung eine neue Abfrage aus.

  • st.user.user_name, um zu erfassen, wer jeden Eintrag eingereicht hat. Weitere Informationen dazu finden Sie unter Personalisieren Ihrer Streamlit-App mit Benutzerinformationen.

Abhängigkeiten deklarieren

Diese App verwendet nur streamlit und die integrierte Snowflake-Verbindung, sodass keine zusätzlichen Abhängigkeiten erforderlich sind.

Weitere Informationen dazu finden Sie unter Verwalten von Abhängigkeiten für Ihre Streamlit-App.

App bereitstellen

  1. Melden Sie sich bei Snowsight an.

  2. Wählen Sie im Navigationsmenü die Option Projects » Streamlit aus.

  3. Wählen Sie + Streamlit App aus.

  4. Geben Sie feedback_app als Namen der App ein.

  5. Wählen Sie eine Datenbank und ein Schema aus.

  6. Wählen Sie Run on container und dann einen Computepool und ein Abfrage-Warehouse aus.

  7. Wählen Sie Create aus.

  8. Ersetzen Sie im Editor den Startcode durch den obigen App-Code.

  9. Wählen Sie Run aus.

App testen

  1. Öffnen Sie die App in Ihrem Browser.

  2. Füllen Sie die Felder des Formulars aus, und wählen Sie Submit aus.

  3. Die Feedback-Tabelle unter dem Formular wird aktualisiert und zeigt Ihren neuen Eintrag an, einschließlich Ihrer E-Mail-Adresse und eines Zeitstempels.

  4. Übermitteln Sie einige weitere Einträge und versuchen Sie dann, die Daten in der Tabelle zu filtern oder zu sortieren.

App erweitern

Versuchen Sie, neben jeder Zeile eine Löschschaltfläche hinzuzufügen, oder erstellen Sie ein Diagramm, das die durchschnittliche Bewertung nach Kategorien anzeigt. Fügen Sie nach dem DataFrame zum Beispiel Folgendes hinzu:

import plotly.express as px

if not data.empty:
    avg_ratings = data.groupby("CATEGORY")["RATING"].mean().reset_index()
    fig = px.bar(avg_ratings, x="CATEGORY", y="RATING", title="Average Rating by Category")
    st.plotly_chart(fig, use_container_width=True)

Wenn Sie plotly hinzufügen möchten, dann deklarieren Sie dies in einer requirements.txt-Datei:

plotly

Für komplexere Abhängigkeitsszenarios können Sie stattdessen eine pyproject.toml-Datei verwenden. Weitere Informationen dazu finden Sie unter Verwalten von Abhängigkeiten für Ihre Streamlit-App.

Bereinigen

Um die in diesem Beispiel erstellten Ressourcen zu entfernen, führen Sie folgende SQL aus:

DROP STREAMLIT IF EXISTS crud_demo.public.feedback_app;
DROP TABLE IF EXISTS crud_demo.public.feedback;

Nächste Schritte