Schnellstart: Schnelle Prototyperstellung mit dem mssql-python-Treiber für Python

In diesem Quickstart verwenden Sie Streamlit, um schnell einen Bericht zu erstellen, damit Sie frühzeitig Nutzerfeedback sammeln können. Du verwendest den mssql-python Python-Treiber, um dich mit deiner Datenbank zu verbinden und die geladenen Daten in deinen Bericht einzulesen.

Der mssql-python Treiber erfordert keine externen Abhängigkeiten von Windows-Computern. Der Treiber installiert alles, was er mit einer einzigen pip Installation benötigt, sodass Sie die neueste Version des Treibers für neue Skripts verwenden können, ohne andere Skripts zu unterbrechen, die Sie nicht zum Upgrade und Test benötigen.

mssql-python-Dokumentation | mssql-python-Quellcode | Paket (PyPI) | Uv

Voraussetzungen

Betriebssystem-Voraussetzungen installieren

Installieren Sie die einmaligen betriebsystem-spezifischen Voraussetzungen. Windows-Nutzer können diesen Schritt überspringen. Für vollständige Plattformdetails siehe Install mssql-python.

apk add libtool krb5-libs krb5-dev libstdc++

Erstellen einer SQL-Datenbank

Erstellen oder verbinden Sie sich mit einer SQL-Datenbank auf einer der folgenden Plattformen:

Erstellen Sie das Projekt, und führen Sie den Code aus.

Erstellen eines neuen Projekts

  1. Öffnen Sie eine Eingabeaufforderung in Ihrem Entwicklungsverzeichnis. Wenn du keines hast, erstelle ein neues Verzeichnis, wie zum Beispiel python oder scripts. Vermeide Ordner auf deinem OneDrive, da Synchronisation die Verwaltung deiner virtuellen Umgebung beeinträchtigen kann.

  2. Erstellen Sie ein neues Projekt mit uv.

    uv init rapid-prototyping-qs
    cd rapid-prototyping-qs
    

Hinzufügen von Abhängigkeiten

Im selben Verzeichnis installieren Sie die Pakete mssql-python, streamlit und python-dotenv.

uv add mssql-python python-dotenv streamlit

Starten Sie Visual Studio Code.

Führen Sie im selben Verzeichnis den folgenden Befehl aus.

code .

Pyproject.toml aktualisieren

  1. Öffnen Sie die Datei pyproject.toml in Ihrem Editor. Diese Datei enthält die Metadaten für Ihr Projekt.

  2. Aktualisieren Sie den description-Wert.

    description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."
    
  3. Speichern und schließen Sie die Datei.

Aktualisieren von main.py

  1. Öffnen Sie die Datei mit dem Namen main.py. Es sollte mit diesem Beispiel vergleichbar sein.

    def main():
        print("Hello from rapid-prototyping-qs!")
    
    if __name__ == "__main__":
        main()
    
  2. Am oberen Rand der Datei fügen Sie die folgenden Importe vor die Zeile mit def main()hinzu.

    Tipp

    Wenn Visual Studio Code Probleme beim Beheben von Paketen hat, müssen Sie den Interpreter aktualisieren, um die virtuelle Umgebung zu verwenden.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection
    import pandas as pd
    import streamlit as st
    
  3. Fügen Sie zwischen den Importen und der Zeile mit def main()dem folgenden Code hinzu.

    def page_load() -> None:
        st.set_page_config(
            page_title="View Data",
            page_icon=":bar_chart:",
            layout="wide",
            initial_sidebar_state="expanded"
        )
    
        st.title("AdventureWorksLT Customer Order History")
    
        SQL_QUERY = """
        SELECT c.*
        FROM SalesLT.Customer AS c
        INNER JOIN SalesLT.SalesOrderHeader AS soh
            ON c.CustomerID = soh.CustomerID;
        """
    
        df = load_data(SQL_QUERY)
    
        event = st.dataframe(
            df,
            use_container_width=True,
            hide_index=True,
            on_select="rerun",
            selection_mode="single-row"
        )
    
        customer = event.selection.rows
    
        SPEND_QUERY_ALL = """
        SELECT
            soh.OrderDate,
            SUM(sod.OrderQty),
            SUM(sod.OrderQty * sod.UnitPrice) AS spend,
            pc.Name AS ProductCategory
        FROM SalesLT.SalesOrderDetail AS sod
        INNER JOIN SalesLT.SalesOrderHeader AS soh
            ON sod.SalesOrderID = soh.SalesOrderID
        INNER JOIN SalesLT.Product AS p
            ON sod.ProductID = p.ProductID
        INNER JOIN SalesLT.ProductCategory AS pc
            ON p.ProductCategoryID = pc.ProductCategoryID
        GROUP BY soh.OrderDate, pc.Name
        ORDER BY soh.OrderDate, pc.Name;
        """
        SPEND_QUERY_CUSTOMER = """
        SELECT
            soh.OrderDate,
            SUM(sod.OrderQty),
            SUM(sod.OrderQty * sod.UnitPrice) AS spend,
            pc.Name AS ProductCategory
        FROM SalesLT.SalesOrderDetail AS sod
        INNER JOIN SalesLT.SalesOrderHeader AS soh
            ON sod.SalesOrderID = soh.SalesOrderID
        INNER JOIN SalesLT.Product AS p
            ON sod.ProductID = p.ProductID
        INNER JOIN SalesLT.ProductCategory AS pc
            ON p.ProductCategoryID = pc.ProductCategoryID
        WHERE soh.CustomerID = ?
        GROUP BY soh.OrderDate, pc.Name
        ORDER BY soh.OrderDate, pc.Name;
        """
        if len(customer) == 0:
            spend_df = load_data(SPEND_QUERY_ALL)
        else:
            customer_id = int(df.loc[customer, 'CustomerID'].values[0])
            spend_df = load_data(SPEND_QUERY_CUSTOMER, params=(customer_id,))
    
        st.write("Here's a summary of spend by product category over time:")
        st.bar_chart(spend_df.set_index('ProductCategory')['spend'], use_container_width=True)
    
        if len(customer) > 0:
            st.write(f"Displaying orders for Customer ID: {df.loc[customer, 'CustomerID'].values[0]}")
            customer_id = int(df.loc[customer, 'CustomerID'].values[0])
            SQL_QUERY = """
            SELECT *
            FROM SalesLT.SalesOrderHeader AS soh
            WHERE soh.CustomerID = ?;
            """
            st.dataframe(load_data(SQL_QUERY, params=(customer_id,)), hide_index=True, use_container_width=True)
            SQL_QUERY = """
            SELECT sod.*
            FROM SalesLT.SalesOrderHeader AS soh
            INNER JOIN SalesLT.SalesOrderDetail AS sod
                ON soh.SalesOrderID = sod.SalesOrderID
            WHERE soh.CustomerID = ?;
            """
            st.dataframe(load_data(SQL_QUERY, params=(customer_id,)), hide_index=True, use_container_width=True)
    
  4. Fügen Sie zwischen den Importen und def page_load() -> None: diesen Code hinzu.

    _connection = None
    
    def get_connection() -> Connection:
        global _connection
        if not _connection:
            load_dotenv()
            _connection = connect(getenv("SQL_CONNECTION_STRING"))
        return _connection
    
    @st.cache_data
    def load_data(SQL_QUERY, params=None) -> pd.DataFrame:
        data = pd.read_sql_query(SQL_QUERY, get_connection(), params=params)
        return data
    
  5. Suchen Sie diesen Code.

    def main():
        print("Hello from rapid-prototyping-qs!")
    
  6. Ersetzen Sie ihn durch diesen Code.

    def main() -> None:
        page_load()
        if _connection:
            _connection.close()
    
  7. Speichern Sie und schließen Sie main.py.

Speichern der Verbindungszeichenfolge

  1. Öffnen Sie die .gitignore Datei, und fügen Sie einen Ausschluss für Dateien hinzu .env . Ihre Datei sollte dem folgenden Beispiel ähneln.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Speichern Sie und schließen Sie .gitignore.

  3. Erstellen Sie im aktuellen Verzeichnis eine neue Datei mit dem Namen .env.

  4. Fügen Sie in der .env Datei einen Eintrag für die Verbindungszeichenfolge mit dem Namen SQL_CONNECTION_STRINGhinzu. Ersetzen Sie die Platzhalter durch Ihre tatsächlichen Werte.

    SQL_CONNECTION_STRING="Server=<server>;Database=<database>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    Der Verbindungszeichenfolge hängt von der Art der SQL-Datenbank ab, mit der du dich verbindest. Für die Azure SQL-Datenbank oder SQL-Datenbank in Fabric verwenden Sie die ODBC-Verbindungszeichenfolge aus der Registerkarte „Verbindungszeichenfolgen“ und passen Sie den Authentifizierungstyp für Ihr Szenario an. Für weitere Informationen zur Verbindungszeichenfolge-Syntax siehe Connection strings for mssql-python.

    Tipp

    Unter macOS funktionieren sowohl ActiveDirectoryInteractive als auch ActiveDirectoryDefault für die Microsoft Entra-Authentifizierung. ActiveDirectoryInteractive fordert Sie auf, sich jedes Mal anzumelden, wenn Sie das Skript ausführen. Um wiederholte Anmeldeaufforderungen zu vermeiden, melden Sie sich einmal mit dem Azure CLIaz login-Befehl an und verwenden Sie ActiveDirectoryDefault. ActiveDirectoryDefault Verwendet die zwischengespeicherten Zugangsdaten wieder.

Verwenden Sie "uv run", um das Skript auszuführen.

  1. Führen Sie im Terminalfenster vor oder in einem neuen Terminalfenster, das im selben Verzeichnis geöffnet ist, den folgenden Befehl aus.

    uv run streamlit run main.py
    

    Ihr Bericht wird in ihrem Webbrowser auf einer neuen Registerkarte geöffnet.

  2. Probieren Sie Ihren Bericht aus, um zu sehen, wie er funktioniert. Wenn Sie etwas ändern, speichern Sie main.py, und verwenden Sie die Option "Neuladen" in der oberen rechten Ecke des Browserfensters.

  3. Um Ihren Prototyp freizugeben, kopieren Sie alle Dateien mit Ausnahme des .venv Ordners auf den anderen Computer. Der .venv Ordner wird mit der ersten Ausführung neu erstellt.