次の方法で共有


クイック スタート: Python 用 mssql-python ドライバーを使用した反復可能なデプロイ

このクイック スタートでは、 uv を使用して、サンプル データを作成して読み込んだデータベースに接続する Python スクリプトのプロジェクトの依存関係と環境を管理します。 Python 用の mssql-python ドライバーを使用してデータベースに接続し、データの読み取りと書き込みなどの基本的な操作を実行します。

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

mssql-python のドキュメント | mssql-python ソース コード | Package (PyPi) | uv

[前提条件]


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

このクイック スタートでは、Microsoft SQL Server の AdventureWorks2025 ライトウェイト スキーマ、Fabric の SQL データベース、または Azure SQL Database が必要です。

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

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

  1. 開発ディレクトリでコマンド プロンプトを開きます。 お持ちでない場合は、 pythonscriptsなどの名前の新しいディレクトリを作成します。OneDrive 上のフォルダーを避け、同期によって仮想環境の管理が妨げられる可能性があります。

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

    uv init mssql-python-repeatable-qs
    cd mssql-python-repeatable-qs
    

依存関係の追加

同じディレクトリに、 mssql-pythonpython-dotenv、および rich パッケージをインストールします。

uv add mssql-python python-dotenv rich

Visual Studio Code を起動します

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

code .

pyproject.toml を更新する

  1. pyproject.toml には、プロジェクトのメタデータが含まれています。 お気に入りのエディターでファイルを開きます。

  2. ファイルの内容を確認します。 この例のようになります。 mssql-pythonの Python のバージョンと依存関係では、>=を使用して最小バージョンを定義します。 正確なバージョンを使用する場合は、バージョン番号の前の >===に変更します。 その後、各パッケージの解決済みバージョンが uv.lock に格納されます。 lockfile を使用すると、プロジェクトに取り組む開発者が一貫したパッケージ バージョンを使用できるようになります。 また、エンド ユーザーにパッケージを配布するときに、まったく同じパッケージ バージョンのセットが使用されるようになります。 uv.lock ファイルは編集しないでください。

    [project]
    name = "mssql-python-repeatable-qs"
    version = "0.1.0"
    description = "Add your description here"
    readme = "README.md"
    requires-python = ">=3.11"
    dependencies = [
        "mssql-python>=0.10.0",
        "python-dotenv>=1.1.1",
        "rich>=14.1.0",
    ]
    
  3. 説明をよりわかりやすいものに更新します。

    description = "Connects to a SQL database using mssql-python"
    
  4. ファイルを保存して閉じます。

main.py の更新

  1. main.pyという名前のファイルを開きます。 この例のようになります。

    def main():
        print("Hello from mssql-python-repeatable-qs!")
    
    if __name__ == "__main__":
        main()
    
  2. ファイルの先頭に、 def main()行の上に次のインポートを追加します。

    ヒント

    Visual Studio Code でパッケージの解決に問題がある場合は、 インタープリターを更新して仮想環境を使用する必要があります。

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect, Connection, Cursor
    from rich.console import Console
    from rich.progress import Progress, SpinnerColumn, TextColumn
    from rich.table import Table
    from argparse import ArgumentParser
    from time import sleep
    
  3. インポートと def main()行の間に、次のコードを追加します。

    def get_results(sleep_time: int = 0) -> None:
     with Progress(
         SpinnerColumn(),
         TextColumn("[progress.description]{task.description}"),
         transient=True,
     ) as progress:
         task = progress.add_task(
             description="Connecting to SQL...")
    
         cursor = query_sql()
    
         # Simulate a slow connection for demo purposes
         sleep(sleep_time)
    
         progress.update(task, description="Formatting results...")
    
         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}")
    
         if cursor:
             cursor.close()
    
         # Simulate a slow connection for demo purposes
         sleep(sleep_time)
    
         progress.stop()
    
         Console().print(table)
    
  4. インポートと def get_results(sleep_time: int = 0) -> None:の間に、このコードを追加します。

    _connection = None
    
    def get_connection() -> Connection:
       global _connection
       if not _connection:
           load_dotenv()
           _connection = connect(getenv("SQL_CONNECTION_STRING"))  # type: ignore
       return _connection
    
    def query_sql() -> Cursor:
    
       SQL_QUERY = """
         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;
       """
    
       conn = get_connection()
       cursor = conn.cursor()
       cursor.execute(SQL_QUERY)
       return cursor
    
  5. このコードを見つけなさい。

    def main():
        print("Hello from test!")
    
  6. これをこのコードに置き換えます。

    def main() -> None:
       parser = ArgumentParser()
       parser.add_argument("--sleep-time", type=int, default=0,
                           help="Time to sleep in seconds to simulate slow connection")
       args = parser.parse_args()
    
       if args.sleep_time > 0:
           get_results(args.sleep_time)
       else:
           get_results()
    
       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"
    

    ヒント

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

uv run を使用してスクリプトを実行する

ヒント

macOS で Microsoft Entra Authentication を使用するには、Visual Studio Code の Azure Repos 拡張機能を使用するか、Azure az login 経由でを実行してログインする必要があります。

  1. 以前のターミナル ウィンドウで、または同じディレクトリに対して新しいターミナル ウィンドウを開き、次のコマンドを実行します。

     uv run main.py
    
  2. 次に、もう一度実行しますが、両方の状態の更新を確認できるように、よりゆっくりとしましょう。

     uv run main.py --sleep-time 5
    

    スクリプトが完了したときに予想される出力を次に示します。

                             Orders by Customer
    ┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
    ┃ Customer ID ┃ Company Name                   ┃ Order Count ┃
    ┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
    │    29485    │ Professional Sales and Service │           1 │
    │    29531    │ Remarkable Bike Store          │           1 │
    │    29546    │ Bulk Discount Store            │           1 │
    │    29568    │ Coalition Bike Company         │           1 │
    │    29584    │ Futuristic Bikes               │           1 │
    └─────────────┴────────────────────────────────┴─────────────┘
    
  3. スクリプトを別のコンピューターにデプロイするには、 .venv フォルダーを除くすべてのファイルを他のコンピューターにコピーします。 仮想環境は、最初の実行で再作成されます。

次のステップ

その他の例については、 mssql-python ドライバーの GitHub リポジトリを参照して、アイデアの投稿や問題の報告を行います。