Zdieľať cez


Rýchly štart: Pripojenie k databáze SQL v službe Fabric pomocou ovládača jazyka Microsoft Python pre SQL Server

V tomto rýchlom štarte môžete rýchlo Streamlit vytvoriť zostavu, ktorá vám umožní rýchlo zhromaždiť pripomienky od používateľov, aby ste sa uistili, že ste na správnej ceste. Ovládač pre jazyk Python sa používa mssql-python na pripojenie k databáze SQL v službe Fabric a čítanie údajov načítaných do zostavy.

Ovládač mssql-python nevyžaduje žiadne externé závislosti na počítačoch so systémom Windows. Ovládač nainštaluje všetko, čo potrebuje, pomocou jedinej pip inštalácie, čo vám umožní používať najnovšiu verziu ovládača pre nové skripty bez toho, aby ste porušili iné skripty, ktoré nemáte čas aktualizovať a otestovať.

Dokumentácia | Zdrojový kód | Balík (PyPi) | UV

Požiadavky


Vytvorenie projektu a spustenie kódu

Vytvorenie nového projektu

  1. Otvorte príkazový riadok vo vývojovom adresári. Ak ho nemáte, vytvorte nový adresár s názvom python, scriptsatď. Vyhnite sa priečinkom na OneDrive, synchronizácia môže narušiť správu vášho virtuálneho prostredia.

  2. Vytvorenie nového projektu pomocou uvprogramu .

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

Pridanie závislostí

V rovnakom adresári nainštalujte balíky mssql-python, streamlit, a python-dotenv .

uv add mssql-python python-dotenv streamlit

Spustenie Visual Studio Code

V rovnakom adresári spustite nasledujúci príkaz.

code .

Aktualizácia súboru pyproject.toml

  1. Súbor pyproject.toml obsahuje metadáta pre váš projekt. Otvorte súbor vo svojom obľúbenom editore.

  2. Aktualizujte popis, aby bol popisnejší.

    description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."
    
  3. Uložte a zatvorte súbor.

Aktualizácia main.py

  1. Otvorte súbor s názvom main.py. Malo by to byť podobné ako v tomto príklade.

    def main():
     print("Hello from rapid-protyping-qs!")
    
     if __name__ == "__main__":
       main()
    
  2. V hornej časti súboru pridajte nasledujúce importy nad riadok s def main().

    Tip

    Ak má Visual Studio Code problémy s riešením balíkov, musíte aktualizovať interpret, aby používal virtuálne prostredie.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection
    import pandas as pd
    import streamlit as st
    
  3. Medzi importy a riadok s def main(), pridajte nasledujúci kód.

    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] c inner join SalesLT.SalesOrderHeader soh on c.CustomerId = soh.CustomerId;"""
    
       df = load_data(SQL_QUERY)
    
       event = st.dataframe(
           df,
           width='stretch',
           hide_index=True,
           on_select="rerun",
           selection_mode="single-row"
       )
    
       customer = event.selection.rows
    
       if len(customer) == 0:
           SQL_QUERY = """select soh.OrderDate, SUM(sod.OrderQty), SUM(sod.OrderQty * sod.UnitPrice) as spend,  pc.Name as ProductCategory from SalesLT.SalesOrderDetail sod inner join SalesLt.SalesOrderHeader soh on sod.    salesorderid = soh.salesorderid inner join SalesLt.Product p on sod.productid = p.productid inner join SalesLT.ProductCategory pc on p.ProductCategoryID = pc.ProductCategoryID GROUP BY soh.OrderDate, pc.Name ORDER     BY soh.OrderDate, pc.Name;"""
       else:
           SQL_QUERY = f"""select soh.OrderDate, SUM(sod.OrderQty), SUM(sod.OrderQty * sod.UnitPrice) as spend,  pc.Name as ProductCategory from SalesLT.SalesOrderDetail sod inner join SalesLt.SalesOrderHeader soh on sod.    salesorderid = soh.salesorderid inner join SalesLt.Product p on sod.productid = p.productid inner join SalesLT.ProductCategory pc on p.ProductCategoryID = pc.ProductCategoryID where soh.CustomerID = {df.loc    [customer, 'CustomerID'].values[0]} GROUP BY soh.OrderDate, pc.Name ORDER BY soh.OrderDate, pc.Name;"""
    
       st.write("Here's a summary of spend by product category over time:")
       st.bar_chart(load_data(SQL_QUERY).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]}")
           SQL_QUERY = f"""SELECT * FROM [SalesLT].[SalesOrderHeader] soh  WHERE soh.CustomerID = {df.loc[customer, 'CustomerID'].values[0]};"""
           st.dataframe(load_data(SQL_QUERY), hide_index=True, width='stretch')
           SQL_QUERY = f"""SELECT sod.* FROM [SalesLT].[SalesOrderHeader] soh INNER JOIN SalesLT.SalesOrderDetail sod on soh.SalesOrderId = sod.SalesOrderId WHERE CustomerID = {df.loc[customer, 'CustomerID'].values[0]};"""
           st.dataframe(load_data(SQL_QUERY), hide_index=True, width='stretch')
    
  4. Medzi importy a def page_load() -> None:, pridajte tento kód.

    _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) -> pd.DataFrame:
        data = pd.read_sql_query(SQL_QUERY, get_connection())
        return data
    
  5. Nájdite tento kód.

    def main():
        print("Hello from rapid-protyping-qs!")
    
  6. Nahraďte ho týmto kódom.

    def main() -> None:
        page_load()
        if _connection:
            _connection.close()
    
  7. Uložiť a zavrieť main.py.

Uloženie reťazca pripojenia

  1. Otvorte .gitignore súbor a pridajte vylúčenie pre .env súbory. Váš súbor by mal byť podobný tomuto príkladu. Po dokončení ho nezabudnite uložiť a zatvoriť.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. V aktuálnom adresári vytvorte nový súbor s názvom .env.

  3. Do súboru .env pridajte položku reťazca pripojenia s názvom SQL_CONNECTION_STRING. Nahraďte tu príklad skutočnou hodnotou reťazca pripojenia.

    SQL_CONNECTION_STRING="Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

Na spustenie skriptu použite uv run

Tip

Ak chcete používať overovanie Microsoft Entra v systéme macOS, musíte sa prihlásiť buď prostredníctvom rozšírenia Azure Repos v editore Visual Studio Code, alebo spustením az login prostredníctvom rozhrania Azure Command-Line Interface (CLI).

  1. V okne terminálu z minulosti alebo v novom okne terminálu otvorenom v rovnakom adresári spustite nasledujúci príkaz.

     uv run streamlit run main.py
    
  2. Zostava sa otvorí na novej karte vo webovom prehliadači.

  3. Vyskúšajte zostavu a zistite, ako funguje. Ak niečo zmeníte, uložte main.py a použite možnosť opätovného načítania v pravom hornom rohu okna prehliadača.

  4. Ak chcete zdieľať svoj prototyp, skopírujte všetky súbory okrem priečinka .venv do druhého počítača. .venv Priečinok sa znova vytvorí pri prvom spustení.

Ďalší krok

Navštívte mssql-python odkladací priestor ovládačov GitHub, kde nájdete ďalšie príklady, môžete prispieť nápadmi alebo nahlásiť problémy.