Del via


Hurtiginnføring: Koble til en SQL-database i Fabric med Microsoft Python-driveren for SQL Server

I denne hurtigstarten bruker Streamlit du til raskt å opprette en rapport, slik at du raskt kan samle inn tilbakemeldinger fra brukere for å sikre at du er på rett spor. Du bruker driveren mssql-python for Python til å koble til SQL-databasen i Fabric og lese dataene som er lastet inn i rapporten.

Driveren mssql-python krever ingen eksterne avhengigheter på Windows-maskiner. Driveren installerer alt den trenger med en enkelt pip installasjon, slik at du kan bruke den nyeste versjonen av driveren for nye skript uten å bryte andre skript som du ikke har tid til å oppgradere og teste.

mssql-python-dokumentasjon | mssql-python kildekode | Pakke (PyPi) | UV

Forutsetning


Opprett prosjektet og kjør koden

Opprette et nytt prosjekt

  1. Åpne en ledetekst i utviklingskatalogen. Hvis du ikke har en, opprett en ny katalog kalt python, scripts, etc. Unngå mapper på OneDrive, synkroniseringen kan forstyrre administrasjonen av det virtuelle miljøet ditt.

  2. Opprett et nytt prosjekt med uv.

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

Legge til avhengigheter

I samme katalog installerer du , mssql-pythonog streamlit pakkerpython-dotenv.

uv add mssql-python python-dotenv streamlit

Start Visual Studio Code

Kjør følgende kommando i samme katalog.

code .

Oppdater pyproject.toml

  1. pyproject.toml inneholder metadataene for prosjektet ditt. Åpne filen i favorittredigeringsprogrammet ditt.

  2. Oppdater beskrivelsen slik at den blir mer beskrivende.

    description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."
    
  3. Lagre og lukk filen.

Oppdater main.py

  1. Åpne filen som heter main.py. Det skal ligne på dette eksemplet.

    def main():
     print("Hello from rapid-protyping-qs!")
    
     if __name__ == "__main__":
       main()
    
  2. Øverst i filen legger du til følgende importer over linjen med def main().

    Tips

    Hvis Visual Studio Code har problemer med å løse pakker, må du oppdatere tolken for å bruke det virtuelle miljøet.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection
    import pandas as pd
    import streamlit as st
    
  3. Mellom importene og linjen med def main(), legg til følgende kode.

    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. Mellom importene og def page_load() -> None:, legg til denne koden.

    _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. Finn denne koden.

    def main():
        print("Hello from rapid-protyping-qs!")
    
  6. Erstatt den med denne koden.

    def main() -> None:
        page_load()
        if _connection:
            _connection.close()
    
  7. Lagre og lukk main.py.

Lagre tilkoblingsstrengen

  1. Åpne .gitignore filen og legg til en ekskludering for .env filer. Filen din skal ligne på dette eksemplet. Sørg for å lagre og lukke den når du er ferdig.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. I gjeldende katalog oppretter du en ny fil med navnet .env.

  3. I .env filen legger du til en oppføring for tilkoblingsstrengen med navnet SQL_CONNECTION_STRING. Erstatt eksemplet her med den faktiske tilkoblingsstrengverdien.

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

Bruk uv run for å kjøre skriptet

Tips

Hvis du vil bruke Microsoft Entra Authentication i macOS, må du være logget på via enten Azure Repos-utvidelsen i Visual Studio Code eller ved å kjøre az login via Azure Command-Line Interface (CLI).

  1. I terminalvinduet fra før, eller et nytt terminalvindu som er åpent i samme katalog, kjører du følgende kommando.

     uv run streamlit run main.py
    
  2. Rapporten åpnes i en ny fane i nettleseren.

  3. Prøv rapporten for å se hvordan den fungerer. Hvis du endrer noe, lagrer main.py du og bruker alternativet for å laste inn på nytt i øvre høyre hjørne av nettleservinduet.

  4. For å dele prototypen .venv din, kopier alle filene unntatt mappen til den andre maskinen. Mappen .venv gjenopprettes med den første kjøringen.

Neste trinn

Gå til GitHub-repositoriet for driveren mssql-python for flere eksempler, for å bidra med ideer eller rapportere problemer.