「Python 3.15に上げてもSQL Serverへ接続できる?」「Rust版に切り替えたほうが速い?」――そんな疑問に関わる更新が届きました。
Microsoftは2026年10月14日(日本時間)、SQL Server/Azure SQL向けPythonドライバー「mssql-python 1.16.0」を公開しました。
今回のポイントは、Python 3.15対応、公式Condaパッケージの登場、データ取得処理の効率化、そしてRust製プロバイダーの追加です。
先に結論を言うと、1.16.0へ通常更新しても、既定の接続方式はMicrosoft ODBC Driver 18のまま。Rust製プロバイダーへ自動切り替えされることはありません。
何が変わった? まずは5つのポイント
| 変更点 | メリット | 注意点 |
|---|---|---|
| Python 3.15対応 | 新しいPython環境へ移行可能 | 他の依存ライブラリも確認 |
| 公式Condaパッケージ | Conda環境で導入しやすい | pipとの混在に注意 |
| 行データ取得の改善 | Python側の処理負荷を削減 | SQL実行速度とは別 |
| Rust製プロバイダー | 新しい接続方式を選べる | 明示的な切り替えが必要 |
| 安定性の修正 | 接続プールなどを改善 | 回帰テストは必要 |
Python 3.15に対応。移行判断はアプリ全体で
Python 3.15.0は2026年10月9日に正式リリースされました。
mssql-python 1.16.0では対応するwheel(ビルド済みパッケージ)が追加され、Windows、Linux、macOSの対応環境で利用できます。
PyPIにはPython 3.10~3.15向けに合計41個のwheelが公開されています。
ただし、ドライバーの対応とアプリ全体の対応は別問題です。Webフレームワークやその他の依存ライブラリ、CI環境なども確認する必要があります。
見逃せない新要素:Condaから公式パッケージを導入できる
今回の大きな変更点が、Microsoftチャンネルでの初の公式Conda配布です。
Conda環境なら次のコマンドで導入できます。
conda install -c microsoft mssql-python=1.16.0
pip環境では、従来どおり以下のコマンドで更新できます。
python -m pip install --upgrade "mssql-python==1.16.0"
Conda版はPythonバインディングと対応するネイティブランタイムをまとめて管理できます。
一方、pip版はmssql-python-odbcやmssql-python-rsなどの関連パッケージに依存します。通常は自動で解決されますが、プライベートPyPIや--no-depsを利用する環境では関連パッケージも確認しましょう。
macOSでは、暗号化接続にシステムOpenSSLが引き続き必要です。
Rust製プロバイダーは追加された選択肢
今回追加されたmssql-odbcは、RustベースのODBCプロバイダーです。
ただし、mssql-python全体がRustに書き換わったわけではありません。
1.16.0へ更新するだけなら、既定のmsodbcsql18が使われます。
Rust版を試す場合は、最初の接続前に明示的に設定します。PowerShellなら次のように指定できます。
$env:MSSQL_PYTHON_NATIVE_PROVIDER = "mssql-odbc"
python .\app.py
Pythonコード側でmssql_python.native_provider = "mssql-odbc"と指定する方法もあります。
現在選択されているプロバイダーはmssql_python.get_native_provider_info()で確認できます。
重要なのは、Rust版だから必ず速くなるとは限らないこと。同じSQL、同じデータ量、同じ環境で比較してから採用を判断するのが確実です。
データ取得が改善。row._mappingも便利
1.16.0では、行オブジェクトの生成やバッチ取得、DATE/TIME/TIMESTAMPの変換、列メタデータの再利用などが改善されました。
さらに、取得した行に読み取り専用のrow._mappingが追加されています。
既に接続済みのcursorがある場合、次のように利用できます。
cursor.execute("SELECT 1 AS id, 'sample' AS name")
row = cursor.fetchone()
print(dict(row._mapping))
出力例:
{'id': 1, 'name': 'sample'}
これまで列名と値を手動で対応付けていた処理を、簡潔に記述できます。
ただし、今回の高速化は主にPython側のデータ取得処理に関するものです。SQL Server側の実行時間やネットワーク待ちが大部分を占める処理では、同じ効果が出るとは限りません。
性能以外にも運用上の修正がある
今回の更新には、接続プールへ戻す前のトランザクション状態の整理、Windowsでの終了時のネイティブアクセス違反への対処、バルクコピーのタイムアウトや識別子の処理改善なども含まれています。
また、setencoding()で未対応の設定が要求された場合は、黙って無視せず警告を出すようになりました。
長時間動く業務アプリや、接続を繰り返し利用するサービスにとっても意味のある更新です。
更新するなら、この順番が現実的
- 既定のODBC Driver 18のまま1.16.0を評価する。 接続、認証、TLS、型変換、トランザクション、プールを確認します。
- 行取得性能を実測する。 同じクエリ・行数で
fetchone()やfetchmany()などの所要時間を比較します。 - Python 3.15やCondaへの移行は別テーマとして判断する。 他の依存関係も確認します。
- Rust製プロバイダーは独立した検証環境で比較する。 通常更新と同時に本番切り替えしないようにします。
まとめ:まずは通常更新、Rust版は必要になってから
mssql-python 1.16.0の価値は、Rust製プロバイダーが追加されたことだけではありません。
Python 3.15対応、公式Condaパッケージ、行取得処理の効率化、運用上の安定性修正が一度に入っています。
今すぐRust版へ切り替える必要はありません。SQL ServerやAzure SQLを使うPythonアプリなら、まず従来方式のまま1.16.0を試し、必要に応じてRust版の比較に進むのが堅実です。
※本記事は2026年10月16日時点の公式発表に基づきます。


コメント