Rövid útmutató: Gyors prototípus-készítés a Pythonhoz készült mssql-python illesztőprogrammal

Ebben a gyorsindításban Streamlit gyorsan készíthetsz jelentést, így korán gyűjtheted a felhasználói visszajelzéseket. A mssql-python Python meghajtóját használod, hogy csatlakozz az adatbázisodhoz, és beolvasd a jelentésbe betöltött adatokat.

Az mssql-python illesztőprogram nem igényel külső függőségeket a Windows rendszerű gépeken. Az illesztőprogram egyetlen pip telepítéssel mindent telepít, amire szüksége van, így az illesztőprogram legújabb verzióját használhatja az új szkriptekhez anélkül, hogy megszegi azokat a szkripteket, amelyek frissítésére és tesztelésére nincs ideje.

az mssql-python dokumentációja | mssql-python forráskód | Csomag (PyPI) | Uv

Előfeltételek

  • Python 3.10 vagy újabb verzió.

  • Ha még nem rendelkezik Pythonnal, telepítse a Python futtatókörnyezetet és a pip csomagkezelőta python.org.

  • Nem szeretné használni a saját környezetét? Kövesd a Container és a helyi fejlesztést, hogy reprodukálható devcontainer vagy GitHub Codespaces környezetet hozz létre.

  • Visual Studio Code a következő bővítményekkel:

    • Python-bővítmény a Visual Studio Code-hoz
  • Az Azure Command-Line Interface (CLI) a jelszó nélküli hitelesítéshez macOS és Linux rendszeren.

  • Ha még nem tette meg uv, kövesse a telepítési utasításokat.

  • Sql Serveren, Azure SQL Database-en vagy SQL Database-adatbázison a Fabricben a AdventureWorks2025 mintasémával és egy érvényes kapcsolati sztringgel.

Az operációs rendszer telepítésének előfeltételei

Egyszeri operációs rendszerspecifikus előfeltételek telepítése. A Windows felhasználók ezt a lépést kihagyhatják. A platform teljes részleteiért lásd: Install mssql-python.

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

SQL-adatbázis létrehozása

Létrehozni vagy csatlakozni SQL adatbázishoz az alábbi platformok egyikén:

A projekt létrehozása és a kód futtatása

Új projekt létrehozása

  1. Nyisson meg egy parancssort a fejlesztői címtárban. Ha nincs ilyened, hozz létre egy új könyvtárat, például python vagy scripts. Kerüld a mappákat a OneDrive-on, mert a szinkronizáció zavarhatja a virtuális környezet kezelését.

  2. Hozzon létre egy új projektet a uv segítségével.

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

Függőségek hozzáadása

Ugyanabban a könyvtárban telepítse a mssql-python, streamlités python-dotenv a csomagokat.

uv add mssql-python python-dotenv streamlit

Indítsa el a Visual Studio Code-ot

Ugyanabban a könyvtárban futtassa a következő parancsot.

code .

Pyproject.toml frissítése

  1. Nyissa meg a pyproject.toml fájlt a szerkesztőben. Ez a fájl tartalmazza a projekted metaadatait.

  2. Frissítsd az description értéket.

    description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."
    
  3. Mentse és zárja be a fájlt.

Main.py frissítése

  1. Nyissa meg a nevű main.pyfájlt. Ennek hasonlónak kell lennie ehhez a példához.

    def main():
        print("Hello from rapid-prototyping-qs!")
    
    if __name__ == "__main__":
        main()
    
  2. A fájl tetejére add hozzá a következő importokat a def main() sort tartalmazó sor elé.

    Jótanács

    Ha a Visual Studio Code-nak problémái vannak a csomagok megoldásával, frissítenie kell az értelmezőt a virtuális környezet használatára.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection
    import pandas as pd
    import streamlit as st
    
  3. Az importok és a def main() sor között adja hozzá a következő kódot.

    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. Adja hozzá ezt a kódot az importok és a def page_load() -> None: kód közé.

    _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. Keresse meg ezt a kódot.

    def main():
        print("Hello from rapid-prototyping-qs!")
    
  6. Cserélje le erre a kódra.

    def main() -> None:
        page_load()
        if _connection:
            _connection.close()
    
  7. Mentés és bezárás main.py.

A kapcsolati sztring mentése

  1. Nyissa meg a .gitignore fájlt, és adjon hozzá kizárást a fájlokhoz .env . A fájlodnak hasonlónak kell lennie a következő példához.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Mentés és bezárás .gitignore.

  3. Az aktuális könyvtárban hozzon létre egy új fájlt..env

  4. A .env fájlban adjon hozzá egy bejegyzést a kapcsolati karakterlánchoz, a következő névvel: SQL_CONNECTION_STRING. Cserélje le a helyőrzőket a tényleges értékekre.

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

    A kapcsolati karakterlánc attól függ, milyen típusú SQL adatbázishoz csatlakozol. Azure SQL Database vagy a Fabricben található SQL-adatbázis esetén használd a Kapcsolati sztringek lapról származó ODBC-kapcsolati sztringet, és állítsd be a hitelesítési típust az adott forgatókönyvhöz. További információért a kapcsolati karakterlánc szintaxisáról lásd: Connection strings for mssql-python.

    Jótanács

    macOS rendszeren mind a ActiveDirectoryInteractive, mind a ActiveDirectoryDefault használható a Microsoft Entra-hitelesítéshez. ActiveDirectoryInteractive minden alkalommal, amikor futtatja a szkriptet, arra kéri, hogy jelentkezzen be. Az ismétlődő bejelentkezési promptok elkerülése érdekében jelentkezzen be egyszer az Azure CLIaz login parancsral, és használd ActiveDirectoryDefault. ActiveDirectoryDefault újrahasználja a gyorsítótárban tárolt hitelesítő adatot.

Használja az "uv run" parancsot a szkript futtatásához

  1. A korábban megnyitott terminálablakban vagy egy új terminálablakban futtassa a következő parancsot.

    uv run streamlit run main.py
    

    A jelentés megnyílik egy új lapon a webböngészőben.

  2. Próbálja ki a jelentést, hogy lássa, hogyan működik. Ha módosít valamit, mentse main.py és használja az újratöltés lehetőséget a böngészőablak jobb felső sarkában.

  3. A prototípus megosztásához másolja az összes fájlt, kivéve a .venv mappát a másik gépre. A .venv mappa az első futtatáskor újra létre lesz hozva.