Sdílet prostřednictvím


Rychlý start: Připojení k databázi SQL z poznámkového bloku Jupyter

V tomto rychlém startu použijete Poznámkový blok Jupyter v editoru Visual Studio Code k rychlému odvození obchodních přehledů. mssql-python Pomocí ovladače pro Python se připojíte ke své databázi SQL a přečtete si data, která jsou pak naformátovaná pro použití v e-mailech, prezentacích sestav atd.

Ovladač mssql-python nevyžaduje žádné externí závislosti na počítačích s Windows. Ovladač nainstaluje všechno, co potřebuje, s jednou pip instalací, což vám umožní používat nejnovější verzi ovladače pro nové skripty bez přerušení jiných skriptů, které nemáte čas upgradovat a testovat.

Dokumentace mssql-python | Zdrojový kód mssql-python | Balíček (PyPi) | Visual Studio Code

Požadavky


Vytvoření databáze SQL

Tento rychlý start vyžaduje schéma AdventureWorks2025 Lightweight na Microsoft SQL Serveru, SQL databázi v Fabric nebo Azure SQL Database.

Vytvoření projektu a spuštění kódu

Vytvoření nového projektu

  1. Otevřete příkazový řádek ve vývojovém adresáři. Pokud ho nemáte, vytvořte nový adresář s názvem python, scriptsatd. Vyhněte se složkám na OneDrivu, synchronizace může narušit správu vašeho virtuálního prostředí.

  2. Vytvořte nový projekt pomocí uvpříkazu .

    uv init jupyter-notebook-qs
    cd jupyter-notebook-qs
    

Přidejte závislosti

Ve stejném adresáři nainstalujte mssql-python, python-dotenv, rich, pandas a matplotlib balíčky. Pak přidejte ipykernel a uv jako vývojové závislosti. VS Code vyžaduje ipykernel a uv jsou přidány, aby bylo možné pracovat s buňkami uv poznámkového bloku pomocí příkazů, jako je !uv add mssql_python.

uv add mssql_python dotenv rich pandas matplotlib
uv add --dev ipykernel
uv add --dev uv

Spusťte Visual Studio Code

Ve stejném adresáři spusťte následující příkaz.

code .

Aktualizace pyproject.toml

  1. Soubor pyproject.toml obsahuje metadata pro váš projekt.

  2. Aktualizujte popis, aby byl popisnější.

    description = "A quick example using the mssql-python driver and Jupyter Notebooks."
    
  3. Uložte a zavřete soubor.

Uložte řetězec připojení

  1. .gitignore Otevřete soubor a přidejte vyloučení souborů.env. Soubor by měl být podobný tomuto příkladu. Až budete hotovi, nezapomeňte ho uložit a zavřít.

    # Python-generated files
    __pycache__/
    *.py[oc]
    build/
    dist/
    wheels/
    *.egg-info
    
    # Virtual environments
    .venv
    
    # Connection strings and secrets
    .env
    
  2. V aktuálním adresáři vytvořte nový soubor s názvem .env.

  3. .env V souboru přidejte položku pro připojovací řetězec s názvem SQL_CONNECTION_STRING. Příklad zde nahraďte skutečnou hodnotou připojovacího řetězce.

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

    Návod

    Připojovací řetězec použitý zde do značné míry závisí na typu databáze SQL, ke které se připojujete. Pokud se připojujete k Azure SQL Database nebo k SQL databázi ve Fabric, použijte připojovací řetězec ODBC z karty Připojovací řetězce. Možná budete muset upravit typ ověřování v závislosti na vašem scénáři. Další informace o připojovacích řetězcích a jejich syntaxi najdete v referenčních informacích k syntaxi připojovacího řetězce.

Vytvoření poznámkového bloku Jupyter

  1. V seznamu vyberte Soubor, pak Nový soubor a Jupyter Notebook . Otevře se nový poznámkový blok.

  2. Vyberte Soubor, pak Uložit jako... a pojmenujte nový poznámkový blok.

  3. Do první buňky přidejte následující importy.

    from os import getenv
    from mssql_python import connect
    from dotenv import load_dotenv
    from rich.console import Console
    from rich.table import Table
    import pandas as pd
    import matplotlib.pyplot as plt
    
  4. Pomocí tlačítka + Markdown v horní části poznámkového bloku přidejte novou buňku Markdownu.

  5. Do nové buňky markdownu přidejte následující text.

    ## Define queries for use later
    
  6. Vyberte zaškrtávací políčko na panelu nástrojů buňky nebo použijte klávesové zkratky Ctrl+Enter nebo Shift+Enter k vykreslení markdownové buňky.

  7. Pomocí tlačítka + Kód v horní části poznámkového bloku přidejte novou buňku kódu.

  8. Do nové buňky kódu přidejte následující kód.

    SQL_QUERY_ORDERS_BY_CUSTOMER = """
    SELECT TOP 5
    c.CustomerID,
    c.CompanyName,
    COUNT(soh.SalesOrderID) AS OrderCount
    FROM
    SalesLT.Customer AS c
    LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh
    ON c.CustomerID = soh.CustomerID
    GROUP BY
    c.CustomerID,
    c.CompanyName
    ORDER BY
    OrderCount DESC;
    """
    
    SQL_QUERY_SPEND_BY_CATEGORY = """
    select top 10
    pc.Name as ProductCategory,
    SUM(sod.OrderQty * sod.UnitPrice) as Spend
    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 pc.Name
    ORDER BY Spend;
    """
    

Zobrazení výsledků v tabulce

  1. Pomocí tlačítka + Markdown v horní části poznámkového bloku přidejte novou buňku Markdownu.

  2. Do nové buňky markdownu přidejte následující text.

    ## Print orders by customer and display in a table
    
  3. Vyberte zaškrtávací políčko na panelu nástrojů buňky nebo použijte klávesové zkratky Ctrl+Enter nebo Shift+Enter k vykreslení markdownové buňky.

  4. Pomocí tlačítka + Kód v horní části poznámkového bloku přidejte novou buňku kódu.

  5. Do nové buňky kódu přidejte následující kód.

    load_dotenv()
    with connect(getenv("SQL_CONNECTION_STRING")) as conn: # type: ignore
        with conn.cursor() as cursor:
            cursor.execute(SQL_QUERY_ORDERS_BY_CUSTOMER)
            if cursor:
                table = Table(title="Orders by Customer")
                # https://rich.readthedocs.io/en/stable/appendix/colors.html
                table.add_column("Customer ID", style="bright_blue", justify="center")
                table.add_column("Company Name", style="bright_white", justify="left")
                table.add_column("Order Count", style="bold green", justify="right")
    
                records = cursor.fetchall()
    
                for r in records:
                    table.add_row(f"{r.CustomerID}",
                                    f"{r.CompanyName}", f"{r.OrderCount}")
    
                Console().print(table)
    

    Návod

    Pokud chcete používat ověřování Microsoft Entra v systému macOS, musíte být přihlášení prostřednictvím rozšíření Azure Repos v editoru Visual Studio Code nebo spuštěním az login prostřednictvím rozhraní Azure Command-Line Interface (CLI).

  6. Ke spuštění poznámkového bloku použijte tlačítko Spustit vše v horní části poznámkového bloku.

  7. Vyberte jádro jupyter-notebook-qs, když se zobrazí výzva.

Zobrazení výsledků v grafu

  1. Zkontrolujte výstup poslední buňky. Měla by se zobrazit tabulka se třemi sloupci a pěti řádky.

  2. Pomocí tlačítka + Markdown v horní části poznámkového bloku přidejte novou buňku Markdownu.

  3. Do nové buňky markdownu přidejte následující text.

    ## Display spend by category in a horizontal bar chart
    
  4. Vyberte zaškrtávací políčko na panelu nástrojů buňky nebo použijte klávesové zkratky Ctrl+Enter nebo Shift+Enter k vykreslení markdownové buňky.

  5. Pomocí tlačítka + Kód v horní části poznámkového bloku přidejte novou buňku kódu.

  6. Do nové buňky kódu přidejte následující kód.

    with connect(getenv("SQL_CONNECTION_STRING")) as conn: # type: ignore
        data = pd.read_sql_query(SQL_QUERY_SPEND_BY_CATEGORY, conn)
        # Set the style - use print(plt.style.available) to see all options
        plt.style.use('seaborn-v0_8-notebook')
        plt.barh(data['ProductCategory'], data['Spend'])
    
  7. Pomocí tlačítka Spustit buňku nebo Ctrl+Alt+Enter buňku spusťte.

  8. Zkontrolujte výsledky. Vytvořte si tento poznámkový blok jako svůj vlastní.

Další krok

Další příklady najdete v mssql-python úložišti GitHubu ovladače, kde můžete přispívat nápady nebo hlásit problémy.