Κοινοποίηση μέσω


Οδηγός γρήγορης εκκίνησης: Σύνδεση σε μια βάση δεδομένων SQL στο Fabric με το πρόγραμμα οδήγησης Microsoft Python για SQL Server

Σε αυτήν τη γρήγορη εκκίνηση, χρησιμοποιείτε Streamlit για να δημιουργήσετε γρήγορα μια αναφορά, επιτρέποντάς σας να συλλέγετε γρήγορα σχόλια από τους χρήστες για να διασφαλίσετε ότι βρίσκεστε στο σωστό δρόμο. Μπορείτε να χρησιμοποιήσετε το πρόγραμμα οδήγησης για την mssql-python Python για να συνδεθείτε στη βάση δεδομένων SQL στο Fabric και να διαβάσετε τα δεδομένα που φορτώνονται στην αναφορά σας.

Το mssql-python πρόγραμμα οδήγησης δεν απαιτεί εξωτερικές εξαρτήσεις σε μηχανήματα Windows. Το πρόγραμμα οδήγησης εγκαθιστά όλα όσα χρειάζεται με μία μόνο pip εγκατάσταση, επιτρέποντάς σας να χρησιμοποιήσετε την πιο πρόσφατη έκδοση του προγράμματος οδήγησης για νέα σενάρια χωρίς να σπάσετε άλλα σενάρια που δεν έχετε χρόνο να αναβαθμίσετε και να δοκιμάσετε.

Τεκμηρίωση | Πηγαίος κώδικας | Πακέτο (PyPi) | UV

Προαπαιτούμενα


Δημιουργήστε το έργο και εκτελέστε τον κώδικα

Δημιουργία νέου έργου

  1. Ανοίξτε μια γραμμή εντολών στον κατάλογο ανάπτυξης. Εάν δεν έχετε, δημιουργήστε έναν νέο κατάλογο που ονομάζεται python, scripts, κ.λπ. Αποφύγετε φακέλους στο OneDrive σας, ο συγχρονισμός μπορεί να επηρεάσει τη διαχείριση του εικονικού σας περιβάλλοντος.

  2. Δημιουργήστε ένα νέο έργο με uvτο .

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

Προσθήκη εξαρτήσεων

Στον ίδιο κατάλογο, εγκαταστήστε τα mssql-pythonπακέτα , streamlitκαι python-dotenv .

uv add mssql-python python-dotenv streamlit

Εκκινήστε τον κώδικα του Visual Studio

Στον ίδιο κατάλογο, εκτελέστε την ακόλουθη εντολή.

code .

Ενημέρωση pyproject.toml

  1. Το pyproject.toml περιέχει τα μεταδεδομένα για το έργο σας. Ανοίξτε το αρχείο στο αγαπημένο σας πρόγραμμα επεξεργασίας.

  2. Ενημερώστε την περιγραφή για να είναι πιο περιγραφική.

    description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."
    
  3. Αποθηκεύστε και κλείστε το αρχείο.

Ενημέρωση main.py

  1. Ανοίξτε το αρχείο με το όνομα main.py. Θα πρέπει να είναι παρόμοιο με αυτό το παράδειγμα.

    def main():
     print("Hello from rapid-protyping-qs!")
    
     if __name__ == "__main__":
       main()
    
  2. Στο επάνω μέρος του αρχείου, προσθέστε τις ακόλουθες εισαγωγές πάνω από τη γραμμή με def main().

    Φιλοδώρημα

    Εάν ο κώδικας του Visual Studio αντιμετωπίζει προβλήματα με την επίλυση πακέτων, πρέπει να ενημερώσετε τον διερμηνέα για να χρησιμοποιήσετε το εικονικό περιβάλλον.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection
    import pandas as pd
    import streamlit as st
    
  3. Μεταξύ των εισαγωγών και της γραμμής με def main(), προσθέστε τον ακόλουθο κώδικα.

    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. Μεταξύ των εισαγωγών και def page_load() -> None:, προσθέστε αυτόν τον κωδικό.

    _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. Βρείτε αυτόν τον κωδικό.

    def main():
        print("Hello from rapid-protyping-qs!")
    
  6. Αντικαταστήστε το με αυτόν τον κωδικό.

    def main() -> None:
        page_load()
        if _connection:
            _connection.close()
    
  7. Αποθήκευση και κλείσιμο main.py.

Αποθήκευση της συμβολοσειράς σύνδεσης

  1. Ανοίξτε το .gitignore αρχείο και προσθέστε μια εξαίρεση για .env αρχεία. Το αρχείο σας θα πρέπει να είναι παρόμοιο με αυτό το παράδειγμα. Φροντίστε να το αποθηκεύσετε και να το κλείσετε όταν τελειώσετε.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Στον τρέχοντα κατάλογο, δημιουργήστε ένα νέο αρχείο με το όνομα .env.

  3. Μέσα στο αρχείο, προσθέστε μια καταχώρηση για τη .env συμβολοσειρά σύνδεσης με το όνομα SQL_CONNECTION_STRING. Αντικαταστήστε το παράδειγμα εδώ με την πραγματική τιμή συμβολοσειράς σύνδεσης.

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

Χρησιμοποιήστε το uv run για να εκτελέσετε το σενάριο

Φιλοδώρημα

Για να χρησιμοποιήσετε τον έλεγχο ταυτότητας Microsoft Entra στο macOS, πρέπει να συνδεθείτε είτε μέσω της επέκτασης Azure Repos στον κώδικα του Visual Studio είτε εκτελώντας az login μέσω του Azure Command-Line Interface (CLI).

  1. Στο παράθυρο τερματικού από πριν ή σε ένα νέο παράθυρο τερματικού ανοιχτό στον ίδιο κατάλογο, εκτελέστε την ακόλουθη εντολή.

     uv run streamlit run main.py
    
  2. Η αναφορά σας ανοίγει σε μια νέα καρτέλα στο πρόγραμμα περιήγησης Web.

  3. Δοκιμάστε την αναφορά σας για να δείτε πώς λειτουργεί. Εάν αλλάξετε κάτι, αποθηκεύστε main.py και χρησιμοποιήστε την επιλογή επαναφόρτωσης στην επάνω δεξιά γωνία του παραθύρου του προγράμματος περιήγησης.

  4. Για να κάνετε κοινή χρήση του πρωτοτύπου σας, αντιγράψτε όλα τα αρχεία εκτός από το .venv φάκελο στο άλλο μηχάνημα. Ο .venv φάκελος δημιουργείται ξανά με την πρώτη εκτέλεση.

Επόμενο βήμα

Επισκεφτείτε το αποθετήριο GitHub του mssql-python προγράμματος οδήγησης για περισσότερα παραδείγματα, για να συνεισφέρετε ιδέες ή να αναφέρετε προβλήματα.