Jaa


Pika-aloitus: Yhteyden muodostaminen SQL-tietokantaan Fabricissa SQL Serverin Microsoft Python -ohjaimella

Tässä pikaoppaassa voit Streamlit luoda nopeasti raportin, jonka avulla voit kerätä nopeasti käyttäjäpalautetta varmistaaksesi, että olet oikealla tiellä. Python-ohjaimen mssql-python avulla voit muodostaa yhteyden SQL-tietokantaan Fabricissa ja lukea raporttiin ladatut tiedot.

Ohjain mssql-python ei vaadi ulkoisia riippuvuuksia Windows-koneissa. Ohjain asentaa kaiken tarvitsemansa yhdellä pip asennuksella, joten voit käyttää ohjaimen uusinta versiota uusiin komentosarjoihin rikkomatta muita komentosarjoja, joita sinulla ei ole aikaa päivittää ja testata.

MSSQL-Python-dokumentaatio | MSSQL-Python-lähdekoodi | Paketti (PyPi) | UV

Edellytykset


Luo projekti ja suorita koodi

Luo uusi projekti

  1. Avaa komentokehote kehityshakemistossa. Jos sinulla ei ole sellaista, luo uusi hakemisto nimeltä python, scripts, jne. Vältä kansioita OneDrivessa, synkronointi voi häiritä virtuaaliympäristön hallintaa.

  2. Luo uusi projekti .uv

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

Lisää riippuvuuksia

Asenna mssql-pythonsamaan hakemistoon , streamlitja paketit python-dotenv .

uv add mssql-python python-dotenv streamlit

Käynnistä Visual Studio Code

Suorita samassa hakemistossa seuraava komento.

code .

Päivitä pyproject.toml

  1. pyproject.toml sisältää projektisi metatiedot. Avaa tiedosto suosikkieditorissasi.

  2. Päivitä kuvaus kuvaavammaksi.

    description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."
    
  3. Tallenna ja sulje tiedosto.

Päivitä main.py

  1. Avaa tiedosto nimeltä main.py. Sen pitäisi olla samanlainen kuin tämä esimerkki.

    def main():
     print("Hello from rapid-protyping-qs!")
    
     if __name__ == "__main__":
       main()
    
  2. Lisää tiedoston yläreunaan seuraavat tuonnit rivin yläpuolelle .def main()

    Vihje

    Jos Visual Studio Codessa on ongelmia pakettien ratkaisemisessa, sinun on päivitettävä tulkki käyttämään näennäisympäristöä.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection
    import pandas as pd
    import streamlit as st
    
  3. Lisää tuonnin ja rivin väliin def main()seuraava koodi.

    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. Lisää tuontien ja väliin def page_load() -> None:tämä koodi.

    _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. Etsi tämä koodi.

    def main():
        print("Hello from rapid-protyping-qs!")
    
  6. Korvaa se tällä koodilla.

    def main() -> None:
        page_load()
        if _connection:
            _connection.close()
    
  7. Tallenna ja sulje main.py.

Tallenna yhteysmerkkijono

  1. Avaa .gitignore tiedosto ja lisää tiedostoille poissulkeminen .env . Tiedoston pitäisi olla samanlainen kuin tässä esimerkissä. Muista tallentaa ja sulkea se, kun olet valmis.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Luo nykyiseen hakemistoon uusi tiedosto nimeltä .env.

  3. Lisää tiedostoon .env merkintä yhteysmerkkijonolle nimeltä SQL_CONNECTION_STRING. Korvaa tässä oleva esimerkki todellisella yhteysmerkkijonon arvolla.

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

Käytä uv run -toimintoa komentosarjan suorittamiseen

Vihje

Jos haluat käyttää Microsoft Entra -todennusta macOS:ssä, sinun on kirjauduttava sisään joko Visual Studio Coden Azure Repos -laajennuksen kautta tai suorittamalla az loginAzure Command-Line Interfacen (CLI) kautta.

  1. Suorita aiemmassa pääteikkunassa tai samaan hakemistoon avautuvassa uudessa pääteikkunassa seuraava komento.

     uv run streamlit run main.py
    
  2. Raportti avautuu uuteen välilehteen selaimessasi.

  3. Kokeile raporttia nähdäksesi, miten se toimii. Jos muutat jotain, tallenna main.py ja käytä selainikkunan oikeassa yläkulmassa olevaa uudelleenlatausvaihtoehtoa.

  4. Jos haluat jakaa prototyyppisi, kopioi kaikki tiedostot kansiota .venv lukuun ottamatta toiseen koneeseen. Kansio .venv luodaan uudelleen ensimmäisellä ajokerralla.

Seuraava vaihe

Vieraile ohjainten GitHub-arkistossa mssql-python saadaksesi lisää esimerkkejä, joissa voit antaa ideoita tai raportoida ongelmista.