Bagikan melalui


Mulai Cepat: Menyambungkan ke database SQL di Fabric dengan Microsoft Python Driver untuk SQL Server

Dalam panduan memulai cepat ini, Anda menggunakan Streamlit untuk membuat laporan dengan cepat, sehingga memungkinkan Anda mengumpulkan umpan balik pengguna untuk memastikan Anda berada di jalur yang benar. Anda menggunakan driver Python mssql-python untuk menyambungkan ke database SQL Anda di Fabric dan membaca data yang dimuat ke dalam laporan Anda.

Driver mssql-python tidak memerlukan dependensi eksternal apa pun pada komputer Windows. Driver menginstal semua yang dibutuhkan dengan satu pip instalasi, memungkinkan Anda menggunakan versi terbaru driver untuk skrip baru tanpa merusak skrip lain yang belum sempat Anda tingkatkan dan uji.

Dokumentasi mssql-python | Kode sumber mssql-python | Paket (PyPi) | UV

Prasyarat


Membuat proyek dan menjalankan kode

Membuat proyek baru

  1. Buka jendela perintah di direktori pengembangan Anda. Jika Anda tidak memilikinya, buat direktori baru yang disebut python, , scriptsdll. Hindari folder di OneDrive Anda, sinkronisasi dapat mengganggu pengelolaan lingkungan virtual Anda.

  2. Buat proyek baru dengan uv.

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

Tambah dependensi

Di direktori yang sama, instal paket mssql-python, streamlit, dan python-dotenv.

uv add mssql-python python-dotenv streamlit

Luncurkan Visual Studio Code

Di direktori yang sama, jalankan perintah berikut.

code .

Memperbarui pyproject.toml

  1. pyproject.toml berisi metadata untuk proyek Anda. Buka file di editor favorit Anda.

  2. Perbarui deskripsi agar lebih deskriptif.

    description = "A quick example of rapid prototyping using the mssql-python driver and Streamlit."
    
  3. Simpan dan tutup file.

Memperbarui main.py

  1. Buka file bernama main.py. Ini harus mirip dengan contoh ini.

    def main():
     print("Hello from rapid-protyping-qs!")
    
     if __name__ == "__main__":
       main()
    
  2. Pada bagian atas file, tambahkan pernyataan impor berikut di atas baris yang mengandung def main().

    Petunjuk / Saran

    Jika Visual Studio Code mengalami masalah dalam menyelesaikan paket, Anda perlu memperbarui penerjemah untuk menggunakan lingkungan virtual.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection
    import pandas as pd
    import streamlit as st
    
  3. Antara impor dan baris dengan def main(), tambahkan kode berikut.

    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. Antara impor dan def page_load() -> None:, tambahkan kode ini.

    _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. Temukan kode ini.

    def main():
        print("Hello from rapid-protyping-qs!")
    
  6. Ganti dengan kode ini.

    def main() -> None:
        page_load()
        if _connection:
            _connection.close()
    
  7. Simpan dan tutup main.py.

Simpan string koneksi

  1. .gitignore Buka file dan tambahkan pengecualian untuk .env file. File Anda harus mirip dengan contoh ini. Pastikan untuk menyimpan dan menutupnya setelah selesai.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. Di direktori saat ini, buat file baru bernama .env.

  3. Di dalam file .env, tambahkan entri untuk string koneksi Anda yang bernama SQL_CONNECTION_STRING. Ganti contoh di sini dengan nilai string koneksi Anda yang sebenarnya.

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

Menggunakan uv run untuk menjalankan skrip

Petunjuk / Saran

Untuk menggunakan Autentikasi Microsoft Entra di macOS, Anda perlu masuk melalui ekstensi Azure Repos di Visual Studio Code atau dengan menjalankan az login melalui Antarmuka Command-Line Azure (CLI).

  1. Di jendela terminal dari sebelumnya, atau jendela terminal baru terbuka ke direktori yang sama, jalankan perintah berikut.

     uv run streamlit run main.py
    
  2. Laporan Anda terbuka di tab baru di browser web Anda.

  3. Coba gunakan laporan Anda untuk melihat cara kerjanya. Jika Anda mengubah apa pun, simpan main.py dan gunakan opsi muat ulang di sudut kanan atas jendela browser.

  4. Untuk berbagi prototipe Anda, salin semua file kecuali folder .venv ke komputer lain. Folder .venv dibuat ulang dengan eksekusi pertama.

Langkah selanjutnya

mssql-python Kunjungi repositori GitHub driver untuk contoh lebih lanjut, untuk menyumbangkan ide atau melaporkan masalah.