このクイック スタートでは、サンプル データを作成して読み込んだデータベースに Python スクリプトを接続します。 Python 用の mssql-python ドライバーを使用してデータベースに接続し、データの読み取りと書き込みなどの基本的な操作を実行します。
mssql-python ドライバーでは、Windows マシンへの外部依存関係は必要ありません。 ドライバーは、1 つの pip インストールで必要なすべてのものをインストールします。これにより、アップグレードとテストの時間がない他のスクリプトを中断することなく、新しいスクリプトに最新バージョンのドライバーを使用できます。
この記事のローカルSQL認証例は、あなたが管理するSQL Serverインスタンスに対するローカル開発にのみ使用してください。 Azure SQL Database、FabricのSQLデータベース、共有開発環境、CI、本番環境の導入では、まずMicrosoft Entra認証や他のパスワードレスフローから始めましょう。
mssql-python のドキュメント | mssql-python ソース コード | パッケージ (PyPI) | Visual Studio Code
[前提条件]
Python 3.10 以降
Python をまだお持ちでない場合は、python.org から Python ランタイムと pip パッケージ マネージャーをインストールします。
自分の環境を使いたくないですか? コンテナやローカル開発に従って、再現可能な開発コンテナやGitHub Codespaces環境を作成しましょう。
SQL Server、Azure SQL Database、またはFabricのSQLデータベース上でデータベースを作成または接続できます。 以下の手順でAdventureWorks2025サンプルスキーマを用いてデータベースを作成し、接続文字列は後で保管してください。
SQL データベースを作成する
以下のいずれかのプラットフォームでSQLデータベースを作成または接続してください:
設定
次の手順に従って、 mssql-python Python ドライバーを使用してアプリケーションを開発するように開発環境を構成します。
注
このドライバーは Tabular Data Stream(TDS) プロトコルを使用しています。 SQL Server、FabricのSQL Database、Azure SQL DatabaseはデフォルトでTDSを有効にするため、追加の設定は不要です。
mssql-python パッケージをインストールする
PyPI から mssql-python パッケージを取得します。
空のディレクトリでコマンド プロンプトを開きます。
mssql-pythonパッケージをインストールします。
python-dotenv パッケージをインストールしてください
PyPIから python-dotenv パッケージを入手してください。
同じディレクトリに、
python-dotenvパッケージをインストールします。pip install python-dotenv
インストールしたパッケージを確認する
PyPI コマンド ライン ツールを使用して、目的のパッケージがインストールされていることを確認できます。
pip listで、インストールされているパッケージの一覧を確認します。pip list
コードを実行する
新しいファイルを作成する
app.pyという名前で新しいファイルを作成します。モジュール docstring を追加します。
""" Connects to a SQL database using mssql-python """mssql-pythonを含むパッケージをインポートします。from os import getenv from dotenv import load_dotenv from mssql_python import connectmssql-python.connect関数を使用して SQL データベースに接続します。load_dotenv() conn = connect(getenv("SQL_CONNECTION_STRING"))現在のディレクトリに、
.envという名前の新しいファイルを作成します。.envファイル内に、SQL_CONNECTION_STRINGという名前の接続文字列のエントリを追加します。 以下の例のいずれかを使い、プレースホルダーを実際の値に置き換えてください。Azure SQL DatabaseまたはFabricのSQLデータベースの場合は、まずMicrosoft Entra認証から始めてください:
SQL_CONNECTION_STRING="Server=<server_name>;Database=<database_name>;Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"開発中のローカルSQL Serverでは、まずSQL認証から始めてください:
SQL_CONNECTION_STRING="Server=localhost,1433;Database=<database_name>;UID=<username>;PWD=<password>;Encrypt=yes;TrustServerCertificate=yes"Caution
.env展開の手段ではなく、地域の開発の利便性として扱いましょう。 絶対にコミットせず、共有環境や本番環境でSQL認証サンプルを再利用せず、証明書検証はローカル開発以外で有効にしておきましょう。Connection文字列を使って、サンプルを名前付きインスタンス、コンテナ、または高度な設定に適応させてください。 Azure SQL DatabaseやFabricのSQLデータベースに接続する場合は、パスワード不要かつインタラクティブなサインインオプションのためにMicrosoft Entra認証を使いましょう。 より広範なシークレットおよび証明書のガイダンスについては、 セキュリティのベストプラクティスを参照してください。
クエリを実行する
SQL クエリ文字列を使用してクエリを実行し、結果を解析します。
SQL クエリ文字列の変数を作成します。
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; """cursor.executeを使用して、データベースに対するクエリから結果セットを取得します。cursor = conn.cursor() cursor.execute(SQL_QUERY)注
この関数は基本的に任意のクエリを受け付け、結果セットを返します。 結果セットを反復処理するには cursor.fetchone()を使用します。
データベースからすべてのレコードを取得するには、
cursor.fetchallをforループと共に使用します。 それから記録を印刷してください。records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")ファイルを
app.py。ターミナルを開き、アプリケーションをテストします。
python app.py予想される出力を次に示します。
29485 1 Professional Sales and Service 29531 1 Remarkable Bike Store 29546 1 Bulk Discount Store 29568 1 Coalition Bike Company 29584 1 Futuristic Bikes
トランザクションとして行を挿入する
INSERTステートメントを安全に実行し、パラメーターを渡します。 パラメーターを値として渡すと、 SQL インジェクション 攻撃からアプリケーションが保護されます。
randrangeライブラリからrandomの上部にapp.pyのインポートを追加します。from random import randrangeapp.pyの最後に、ランダムな製品番号を生成するコードを追加します。productNumber = randrange(1000)ヒント
ここでランダムな製品番号を生成すると、このサンプルを複数回実行できるようになります。
SQL ステートメント文字列を作成します。
SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (%(name)s, %(product_number)s, %(standard_cost)s, %(list_price)s, CURRENT_TIMESTAMP) """cursor.executeを使用してステートメントを実行します。cursor.execute( SQL_STATEMENT, { 'name': f'Example Product {productNumber}', 'product_number': f'EXAMPLE-{productNumber}', 'standard_cost': 100, 'list_price': 200 } )cursor.fetchoneを使用して単一の結果を取得し、結果の一意の識別子を出力してから、connection.commitを使用してトランザクションとして操作をコミットします。result = cursor.fetchone() print(f"Inserted Product ID : {result.ProductID}") conn.commit()ヒント
必要に応じて、
connection.rollbackを使用してトランザクションをロールバックできます。cursor.closeとconnection.closeを使用してカーソルと接続を閉じます。cursor.close() conn.close()ファイルを
app.pyし、アプリケーションをもう一度テストします。python app.py予想される出力を次に示します。
Inserted Product ID : 1001
次のステップ
これらの記事を使って、さらに成長を続けましょう:
- ローカルSQL Server、Azure SQL、コンテナ、名前付きインスタンスにサンプルを適応させるための接続文字列。
- コンテキストマネージャー、プーリング、接続設定を使った接続管理。
- 認証、証明書、接続の問題を診断するためのトラブルシューティング。