クイック スタート: Jupyter Notebook から SQL データベースに接続する

このクイックスタートでは、Visual Studio CodeのJupyter Notebookを使って、ビジネスインサイトを素早く抽出しましょう。 Pythonのmssql-pythonドライバーを使ってSQLデータベースに接続し、データを読み取り、メール、レポート、プレゼンテーションで使うためのフォーマットを行ってください。

mssql-python ドライバーでは、Windows マシンへの外部依存関係は必要ありません。 ドライバーは、1 つの pip インストールで必要なすべてのものをインストールします。これにより、アップグレードとテストの時間がない他のスクリプトを中断することなく、新しいスクリプトに最新バージョンのドライバーを使用できます。

mssql-python のドキュメント | mssql-python ソース コード | パッケージ (PyPI) | Visual Studio Code

[前提条件]


SQL データベースを作成する

以下のいずれかのプラットフォームでSQLデータベースを作成または接続してください:

プロジェクトを作成してコードを実行する

新しいプロジェクトを作成する

  1. 開発ディレクトリでコマンド プロンプトを開きます。 もし持っていなければ、 pythonscriptsなどの新しいディレクトリを作成しましょう。 OneDriveのフォルダは避けてください。同期が仮想環境の管理に支障をきたす可能性があります。

  2. を使用して新しいuvを作成します。

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

依存関係を追加する

同じディレクトリに、 mssql-pythonpython-dotenvrichpandas、および matplotlib パッケージをインストールします。 次に、 ipykerneluv を開発依存関係として追加します。 VS Codeはノートブックセルの実行に ipykernel が必要で、セル内のパッケージ管理 uv が必要です。

uv add mssql-python python-dotenv rich pandas matplotlib
uv add --dev ipykernel
uv add --dev uv

Visual Studio Code を起動します

同じディレクトリで、次のコマンドを実行します。

code .

pyproject.toml を更新する

  1. pyproject.toml には、プロジェクトのメタデータが含まれています。

  2. 説明をよりわかりやすいものに更新します。

    description = "A quick example using the mssql-python driver and Jupyter Notebooks."
    
  3. ファイルを保存して閉じます。

接続文字列を保存する

  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"
    

    ヒント

    ここで使用される接続文字列は、接続先の SQL データベースの種類によって大きく異なります。 Fabric で Azure SQL Database または SQL データベースに接続する場合は、[接続文字列] タブから ODBC 接続文字列を使用します。シナリオによっては、認証の種類の調整が必要になる場合があります。 接続文字列とその構文の詳細については、 接続文字列の構文リファレンスを参照してください。

Jupyter Notebook を作成する

  1. 一覧から [ ファイル] を選択し、[ 新しいファイル ] と [Jupyter Notebook ] を選択します。 新しいノートブックが開きます。

  2. [ ファイル]、[ 名前を付けて保存... ] の順に選択し、新しいノートブックに名前を付けます。

  3. 最初のセルに次のインポートを追加します。

    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. ノートブックの上部にある [+ マークダウン ] ボタンを使用して、新しいマークダウン セルを追加します。

  5. 新しいマークダウン セルに次のテキストを追加します。

    ## Define queries for use later
    
  6. セル ツールバーで チェック マーク を選択するか、キーボード ショートカット Ctrl+Enter または Shift+Enter を使用してマークダウン セルをレンダリングします。

  7. ノートブックの上部にある [+ コード ] ボタンを使用して、新しいコード セルを追加します。

  8. 新しいコード セルに次のコードを追加します。

    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;
    """
    

テーブルに結果を表示する

  1. ノートブックの上部にある [+ マークダウン ] ボタンを使用して、新しいマークダウン セルを追加します。

  2. 新しいマークダウン セルに次のテキストを追加します。

    ## Print orders by customer and display in a table
    
  3. セル ツールバーで チェック マーク を選択するか、キーボード ショートカット Ctrl+Enter または Shift+Enter を使用してマークダウン セルをレンダリングします。

  4. ノートブックの上部にある [+ コード ] ボタンを使用して、新しいコード セルを追加します。

  5. 新しいコード セルに次のコードを追加します。

    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)
    

    ヒント

    macOS では、 ActiveDirectoryInteractiveActiveDirectoryDefault の両方が Microsoft Entra 認証で機能します。 ActiveDirectoryInteractive スクリプトを実行するたびにサインインするように求められます。 繰り返しサインインのプロンプトを避けるために、を実行してaz loginから一度サインインし、その後キャッシュされた認証情報を再利用するActiveDirectoryDefaultを使いましょう。

  6. ノートブックの上部にある [ すべて実行 ] ボタンを使用して、ノートブックを実行します。

  7. プロンプトが表示されたら 、jupyter-notebook-qs カーネルを選択します。

グラフに結果を表示する

  1. 最後のセルの出力を確認します。 3 つの列と 5 つの行を含むテーブルが表示されます。

  2. ノートブックの上部にある [+ マークダウン ] ボタンを使用して、新しいマークダウン セルを追加します。

  3. 新しいマークダウン セルに次のテキストを追加します。

    ## Display spend by category in a horizontal bar chart
    
  4. セル ツールバーで チェック マーク を選択するか、キーボード ショートカット Ctrl+Enter または Shift+Enter を使用してマークダウン セルをレンダリングします。

  5. ノートブックの上部にある [+ コード ] ボタンを使用して、新しいコード セルを追加します。

  6. 新しいコード セルに次のコードを追加します。

    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. [セルの実行] ボタンまたはCtrl+Alt+Enterを使用してセルを実行します。

  8. 結果を確認します。 このノートブックを自分のものにします。

次のステップ

これらの記事を使って、さらに成長を続けましょう:

  • 異なるSQLデータベースタイプや認証方法に対応する接続文字列を構築します。
  • pandas統合 により、クエリ結果を直接DataFramesに読み込み、ノートブック内で解析できます。
  • Arrow integration Apache Arrow を使用して列指向データを扱い、高性能な分析を可能にします。