mssql-pythonの新しいこと

この記事では、mssql-pythonドライバの各リリースで何が変更されたかを、まず最新のものから挙げています。 各セクションでは、新機能、挙動の変更、バグ修正を1バージョンごとに扱っています。

Microsoftが現在サポートしているバージョンについては、「サポートライフサイクル」を参照してください。

MSSQL-Python 1.14.0

発売日:2026年8月

[機能強化]

パラメータ検出とバインディングはネイティブコードで実行されます

パラメータ型検出とバインディングは、パラメータごとのPython呼び出しではなく、単一のネイティブパイプラインで動作します。 この変更により、大規模な運用(例えばバルクインサート)でのエンドツーエンドのスループット向上という大きなパフォーマンスボトルネックが解消されます。 申請の変更は必要ありません。

バグの修正

timeoutconnect()は認証タイムアウトではなくクエリのタイムアウトを設定するという論数です

timeoutの引数はSQL_ATTR_LOGIN_TIMEOUTを設定し、認証試行を境界します。これは引数名とドキュメントが説明しているものです。 以前のバージョンでは、これは文ごとのクエリタイムアウトとなり connect(timeout=30) 、接続試行の実行時間を制限せず、30秒後にクエリを中止する仕組みとなりました。 文ごとのクエリタイムアウトは Connection.timeout プロパティとして利用可能です。

Important

もし timeoutconnect() に渡して長期実行のクエリを中止すると、その動作はなくなります。 代わりに Connection.timeout をセットしてください。 同様に、bulkcopy()が内部接続に使う接続タイムアウトを広げるためにconnect(timeout=)に頼る場合も同様です。カーソルを作成する前にConnection.timeoutを設定してください。

詳細は「 接続タイムアウト」を参照してください。

bulkcopy() 却下 timeout=0

0 timeoutが検証エラーを引き起こしましたが、0は基盤となるバルクコピーAPIのタイムアウトなしを意味します。 メソッドは 0 を受け入れ、操作タイムアウトを無効化します。 負の値、非整数値、ブール値も依然として却下されます。

詳細は 「一括コピー」をご覧ください。

クリーンアップは元のArrow fetch例外を置き換えました

Arrowリーダーからのフェッチが失敗すると、ドライバーのクリーンアップパスが元のエラーに代わる2つ目のエラーを発生させ、呼び出し者はフェッチ失敗の理由ではなくクリーンアップ失敗と見なしました。 クリーンアップはカーソル状態をまずチェックし、元の例外を保持します。

executemany() 10進変換誤差にはパラメータ値が含まれていました

executemany()での十進変換失敗は、問題値を連鎖例外を通じて報告し、顧客データがアプリケーションログや監視システムに存在する可能性があった。 エラーは行インデックス、列インデックス、値タイプのみを報告します。

詳細については、エラー処理に関するページを参照してください。

一括コピーが却下された矢印表示タイプ

bulkcopy_arrow() 可変長の矢印表示配列を消費できなかったため、ポーラー string_view 列を DataFrame.to_arrow() で変換する必要がありました。 String Viewの値とNULLはArrow Cデータインターフェースを直接通過します。

詳細は 「極子積分」を参照してください。

Windows拡張の読み込みはホストCPUアーキテクチャを使用していました

Windowsでは、ドライバーは実行中のインタプリタではなくホストCPUを基準にネイティブ拡張を選択していたため、ARM64ホスト上のx64 Pythonはフォールバックパスを経由して読み込み、stdoutに通知を書き込みました。 ローダーはインタプリタからアーキテクチャを導き出し、フォールバックを警告として報告します。

MSSQL-Python 1.13.0

発売日:2026年8月

[機能強化]

ODBCドライバーバイナリは、 mssql-python-odbc

バージョン1.13.0では、mssql-pythonホイールからlibs/フォールバックが削除され、install_requiresmssql-python-odbc==18.6.2.1を宣言します。 コマンド pip install mssql-python は依然として動作するドライバーを生成します。 --no-depsでインストールする際、またはミラーしないプライベートインデックスからmssql-python-odbc明示的にインストールしてください。

詳細については、「インストール」を参照してください。

Apache Arrowソースからの一括コピー

新しいcursor.bulkcopy_arrow()メソッドは、すでにApache Arrow形式でデータを読み込み、各行をPythonオブジェクトに変換せずに読み込みます。 今、アローの源を bulkcopy() に渡すと、 TypeErrorが上がります。

詳細については、 Apache Arrow統合 および Bulk Copyをご覧ください。

token_providerparameter for Microsoft Entra credentials

connect()関数とConnectionクラスはtoken_provider引数を受け入れているため、接続文字列で認証モードを名付ける代わりに、DefaultAzureCredentialのような資格オブジェクトを渡すことができます。 この議論はAuthenticationキーワードとattrs_beforeを通るトークンと相反し、Azure商用クラウド範囲のみをサポートしています。

詳細については、Microsoft Entra 認証に関するページを参照してください。

アイデンティティ認識接続プーリング

接続プールは現在、Microsoft Entraのアイデンティティで接続を分離しています。 以前のバージョンでは、プールは接続文字列のみにキー化されていたため、あるユーザーとして認証された接続を別のユーザーからのリクエストに渡すことができました。 また、接続リクエストがプールを逃した場合にのみトークンを取得し、トークンの有効期限が5分以内の時点で更新します。

詳細については、 コネクションプーリングをご覧ください。

バグの修正

executemany() NULLが最初の行の後に現れた場合、ゼロ行を挿入しました

非NULLとNULLの数値値を混同した executemany() 呼び出しは、最初の行の後に最初のNULLが現れた場合、ゼロ行を挿入し、例外は発生しませんでした。 この挙動は tinyintsmallintintfloat パラメータに影響を与えました。 ドライバーは配列実行前に固定幅の数値パラメータごとにODBCインジケーターを初期化します。

SQL_WVARCHAR出力コンバータは非文字列列を変換しました

単一文字列コンバータを登録すると、ライバが自分のコンバータを持たない列に対してはSQL_WVARCHARコンバータに戻るため、int、10進、日付の値も変換されます。 ドライバーは、列のマッピングされたPython型がstrまたはbytesである場合にのみそのフォールバックを使用します。

整数SQL型コードで登録された出力コンバータは一度も動作しませんでした

SQL_DECIMALのような整数SQL型コードで登録されたコンバータは保存されましたが、ドライバがcursor.descriptionのPython型のみをディスパッチするため、呼び出されることはありませんでした。 ドライバーはまず整数コードでディスパッチし、次にPython型を、最後にSQL_WVARCHARフォールバックを処理します。

Important

もし以前のバージョンで整数SQLコードでコンバーターを登録していれば、アップグレードするとそのコンバーターは動作し始めます。 デプロイ前に確認してください。なぜなら、以前変更せずに通過した列の値が変換されているからです。

詳細については、 カスタムタイプコンバーターをご覧ください。

Arrowリーダーを閉じてもサーバー側のカーソルは解放されませんでした

Arrowリーダーを閉じるとサーバー側のカーソルが割り当てられたままになり、親カーソル Cursor 一貫性がありません。なぜなら、 cursor.arrow_reader() が生の pyarrow.RecordBatchReaderを返したからです。 このメソッドは、 close() メソッドがサーバー側カーソルを解放しカーソルの状態をリセットするラッパーを返し、ラッパーはコンテキストマネージャーとして機能します。

詳細については、 Apache Arrowの統合を参照してください。

部分的に初期化されたカーソルが AttributeErrorCursor.__del__

初期化器が失敗したカーソルは、ガビーコレクション中に AttributeError を表示不能な例外として表示しました。

Cursor.__init__ closedと属性hstmt設定する前に、__del__それを読み取ろうとしました。 イイニライザは、コードが生成される前に両方の属性を設定し、 __del__ ログコールを守ってインタプリタシャットダウン中も安全に保ちます。

MSSQL-Python 1.12.0

発売日:2026年7月

[機能強化]

スタンドアロン mssql-python-odbc コンパニオンパッケージ

ODBCドライバのバイナリは現在、 mssql-python-odbcとして別途公開されており、これはバージョン 18.6.2にピン留めされたデータ専用の補助パッケージです。 コードを変更する必要はありません。なぜなら pip install mssql-python はコンパニオンパッケージを一緒にインストールするからです。 ネイティブローダーはコンパニオンパッケージを好み、 mssql-python ホイールが存在しないときはバンドルされたバイナリにフォールバックします。

詳細については、「インストール」を参照してください。

バグの修正

cursor.bulkcopy() 現在は親接続の接続タイムアウトを使用します

bulkcopy() 今は親接続の接続タイムアウトを使い、 connect(..., timeout=<seconds>)で設定しています。 以前は、その一括コピーが開く別接続には、Pythonからは上書きできない15秒間の接続タイムアウトがハードコードされていました。 timeout=0で作成された親接続でも15秒のデフォルトが残ります。

詳細は 「一括コピー」をご覧ください。

cursor.bulkcopy() CLRユーザー定義型列のサポート

cursor.bulkcopy()以前は、共通言語ランタイム(CLR)ユーザー定義型(組み込みの地理幾何、階層型を含む)を使用する宛先列に対してProtocol Error: Unsupported TDS type for bulk copy: 0xF0で失敗しました。 ドライバーはCLR UDTの列を配線上の varbinary(max) にマッピングし、あなたが提供したバイトをUDTの IBinarySerialize ペイロードとしてストリーミングします。 修正は0.1.7 mssql_py_core でリリースされます。

詳細については、 Bulk copy および Datatype mappingsをご覧ください。

MSSQL-Python 1.11.0

発売日:2026年7月

[機能強化]

コンテキストマネージャーの意味論の改善

with connection: ブロックがクリーンに退出したときにトランザクションをコミットし、例外がブロックから出るとロールバックします。

詳細については、「 トランザクション管理」を参照してください。

バグの修正

  • ODBC のテアダウン パス(conn.close() および cursor.close())と、SSH トンネルおよびインプロセス フォワーダー構成における SQLDescribeParam 値のパラメーターに対する None で発生する GIL デッドロックを修正しました。
  • 一時テーブルやテーブル変数に固定された BINARY および VARBINARY のNULLパラメータ。 自動型解決が失敗すると、ドライバーは明示的なcursor.setinputsizes()誘導を含むPython警告を発します。
  • Apple Silicon 環境でのクリーンインストール時に import mssql_python が失敗する問題を修正しました(1.8.0で発生したリグレッション)。 バンドルされたODBCのdylib依存関係は、 arm64 アーキテクチャと x86_64 アーキテクチャの両方で書き換えられました。
  • Rustコアで Authentication=ActiveDirectoryServicePrincipal認証時に一括コピー操作が凍結していたGILのデッドロックを修正しました。

MSSQL-Python 1.10.0

リリース日: 2026 年 6 月

[機能強化]

ActiveDirectoryServicePrincipalのバルクコピーのサポート

cursor.bulkcopy() 現在は Authentication=ActiveDirectoryServicePrincipalをサポートしているので、Service Principalの資格で一括挿入が可能です。

詳細は「一括コピー」および「Microsoft Entra認証」をご覧ください。

バグの修正

  • Arrowのフェッチパスに固定された非ASCIIの VARCHARCHAR データ。
  • 一括読み込み処理中に発生する接続タイムアウトを修正しました。

MSSQL-Python 1.9.0

リリース日: 2026 年 6 月

[機能強化]

一括コピー内の行オブジェクト

cursor.bulkcopy() では、手動でタプルに変換することなく、フェッチした Row オブジェクトを直接受け取れるようになりました。

詳細については、 Bulk copy および Row objectsをご覧ください。

バグの修正

  • 固定ホイールのパッケージングにより、simdutf は常に静的リンクされるようになりました。
  • DECIMAL内の大きなexecutemany()挿入を修正。
  • NULLパラメータの誤った型フォールバックを修正しました。
  • pickle および unpickle のラウンド トリップに関する例外を修正しました。
  • nextset() を修正し、結果セット間で PRINT メッセージが保持されるようにしました。
  • executemany() データ実行時フォールバック パスにおける Row の処理を修正しました。
  • 静的解析ツール向けの fetch メソッドの型チェックを修正しました。

MSSQL-Python 1.8.0

リリース日: 2026 年 5 月

[機能強化]

ActiveDirectoryMSIによるバルクコピーのサポート

cursor.bulkcopy() 現在はシステム割り当ておよびユーザー割り当てのマネージドIDの Authentication=ActiveDirectoryMSI をサポートしています。

詳細は「一括コピー」および「Microsoft Entra認証」をご覧ください。

行の文字列キーによるインデックス指定

現在では、位置インデックスや属性アクセスに加え、列名(例えば row["col"])で行の値にアクセスできます。

詳細は 「行オブジェクト」をご覧ください。

バンドルされたODBCドライバーのアップグレード

Microsoft ODBCドライバ(SQL Server用)は18.6.2.1に更新されました。

バグの修正

  • トークンベース認証における遅延接続属性の寿命問題を修正しました。
  • 認証パスにおける繰り返し接続文字列解析を修正しました。
  • シーケンス入力の executemany() 型注釈を修正しました。

MSSQL-Python 1.7.1

リリース日: 2026 年 5 月

[機能強化]

ホイールのカバー範囲の拡大と性能向上

このリリースには以下が含まれます。

  • RHEL 8対応のホイール。
  • macOSを3.10 Pythonuniversal2ホイールに復元しました。
  • simdutfを通じてUTF-16のハンドリングが改善されました。
  • 最適化 execute() ホットパス。

パフォーマンスへの影響: execute() メソッドのホットパス最適化によりバッチ実行スループットが向上します。

詳細については、「インストール」を参照してください。

バグの修正

  • 認証失敗を修正し、RuntimeErrorではなくmssql_python DB-API例外を発生させます。
  • ODBCの実行、フェッチ、トランザクション、接続属性呼び出しのブロックにGILリリースを拡張しました。
  • 小数値の符号が変わる際に発生する executemany() の不具合を修正しました。
  • プラットフォーム間で一貫していなかった CP1252 の VARCHAR デコードを修正しました。
  • cursor.bulkcopy()列およびNVARCHAR(MAX)列の空文字列におけるVARCHAR(MAX)エラーを修正しました。

Note

バージョン1.7.0は出版上の問題により撤回されました。 バージョン1.7.1以降を使いましょう。

MSSQL-Python 1.6.0

リリース日: 2026 年 4 月

[機能強化]

パーサーベースの接続文字列サニタイズ

接続文字列のサニタイズは、正規表現の代わりにパーサを使うため、パスワードフィールドに特殊文字を含む接続文字列やブレース値が正しく解析されます。

詳細については、接続文字列に関するページを参照してください。

バグの修正

  • ODBC の接続および切断操作がブロックされている際の GIL の解放に関する問題を修正しました。
  • setinputsizes()SQL_DECIMAL のヒントがある場合の SQL_NUMERIC クラッシュを修正しました。
  • ODBCカタログメソッドの誤った fetchone() 挙動を修正しました。
  • reset_cursor=False を使用した際の無効カーソル状態エラーを修正しました。
  • マッピングベースのパラメータ列のための固定 executemany() 型ヒント。
  • setup_logging(log_file_path=...)に対するパス・トラバーサル対策を追加しました。

MSSQL-Python 1.5.0

リリース日: 2026 年 4 月

新機能

Apache Arrow フェッチサポート

3つの新しいカーソル方式が、Arrow Cデータインターフェースを通じて高性能な列形式データ取得を提供します。

  • cursor.arrow() 完全な pyarrow.Tableを返します。
  • cursor.arrow_batch() は単一の pyarrow.RecordBatch を返します。
  • cursor.arrow_reader() は、ストリーミング用の pyarrow.RecordBatchReader を返します。

これらのメソッドは各値に対してPythonオブジェクトを作成するわけではありません。 完全なドキュメントについては、 Apache Arrow統合を参照してください。

sql_variant 型のサポート

ドライバーはフェッチ時にsql_variant列を検出し、その基礎となるベース型を解決し、生のバイトではなく正しく型付けされたPython値を返します。

Note

sql_variant カラムはストリーミングフェッチパスを使用しており、固定型カラムと比べてわずかなパフォーマンスに影響がある場合があります。

詳細については、「 データ型マッピング」を参照してください。

ネイティブUUIDサポート

新しい native_uuid 設定により、 UNIQUEIDENTIFIER 列を uuid.UUID オブジェクト(デフォルト)として返すか、pyodbc互換の大文字文字列として返されるかを制御します。 モジュール単位か接続ごとに設定してください。

詳細については、 モジュール構成を参照してください。

行クラスのパブリック エクスポート

Rowクラスは現在、型注釈のために最上位レベルでエクスポートされています。

詳細は 「行オブジェクト」をご覧ください。

バグの修正

  • 括弧で囲まれた識別子、文字列リテラル、コメント内での ? の誤検知を修正しました。
  • VARBINARY列のNULLパラメータバインディングを固定しました(暗黙の変換エラーが発生しません)。
  • datetime.time 列から TIME(1) 列までの列で、TIME(7) 値のラウンドトリップ時にマイクロ秒が失われる問題を修正しました。
  • TIME 列において、秒以下の桁数も正しく含まれるよう、Arrow のフェッチパスを修正しました。
  • Microsoft Entra ID認証方法による固定の一括コピー(古い認証フィールドは検証エラーを起こしなくなりました)。
  • 認証性能向上のためにモジュールレベルでAzure Identityの認証インスタンスをキャッシュすること。

MSSQL-Python 1.4.0

発売日:2026年2月

新機能

一括コピーサポート

高性能な大量データロードは現在、 cursor.bulkcopy()を通じて利用可能です。 この方法は、 batch_sizetimeoutcolumn_mappingskeep_identitycheck_constraintstable_lockkeep_nullsfire_triggersuse_internal_transactionの選択肢を受け入れています。

詳細は 「一括コピー」をご覧ください。

Improvements

  • 大規模な結果セットに対するパフォーマンス最適化。
  • バッチ操作中のメモリ使用量を削減します。
  • 一括コピー失敗に対する強化されたエラーメッセージ。

MSSQL-Python 1.3.0

発売日:2026年1月

新機能

設定クラス

新しいSettingsクラスを通じてモジュール全体の動作を設定し、cursor.descriptionの列名のlowercase設定も含まれます。

詳細については、 モジュール構成を参照してください。

Improvements

  • Azure SQLフェイルオーバー時の接続タイムアウトの扱いが良くなりました。
  • Python 3.13との互換性が向上しました。

MSSQL-Python 1.2.0

発売日:2026年1月

新機能

スキーマ発見手法

新しいカーソル手法は、データベースのメタデータ、すなわち tables()columns()primaryKeys()foreignKeys()procedures()statistics()getTypeInfo()を探求します。

詳細については、 スキーマ発見を参照してください。

Improvements

  • 繰り返しスキーマクエリのための強化メタデータキャッシュ。
  • columns() の結果における計算列の処理が改善されました。

MSSQL-Python 1.1.0

発売日:2025年12月

新機能

カスタム出力コンバータ

フェッチ時に列値を変換するためのカスタム関数レジスタ( add_output_converter()get_output_converter()remove_output_converter()clear_output_converters())。

詳細については、 カスタムタイプコンバーターをご覧ください。

Improvements

  • 型変換失敗に対するエラーメッセージの改善。
  • Noneを返す変換関数のサポート。

MSSQL-Python 1.0.0

発売日:2025年11月

初期の GA リリース

mssql-python の最初の一般提供版リリース。これは、Microsoft の SQL Server 向けネイティブ Python ドライバーです。

詳細は mssql-python ドライバーを参照してください。

コア機能

  • DDBCアーキテクチャ:ODBCドライバーのインストールを不要に直接データベース接続。
  • DB-API 2.0準拠:標準Pythonデータベースインターフェース。
  • 接続プーリング:組み込みの接続プール管理。
  • Microsoft Entra認証:Azureのアイデンティティベース認証の完全サポート。
  • TLS暗号化:証明書検証による安全な接続。

接続機能

  • 21 個の接続文字列キーワード
  • 9つの認証モード(SQL、Windows、7つのMicrosoft Entra IDメソッド)。
  • オートコミットコントロール。
  • 実行方法: execute()executemany()batch_execute()
  • set_attr()getinfo()を通じた接続属性。
  • コンテキストマネージャーのサポート。

カーソル機能

  • 標準的なフェッチ方法: fetchone()fetchmany()fetchall()
  • 拡張方法: fetchval()skip()
  • 実行方法: execute()executemany()
  • 属性とインデックスアクセスを持つ行オブジェクト。
  • nextset()による複数結果セットナビゲーション。

データ型のサポート

  • すべてSQL Serverのネイティブ型です。
  • Python↔SQL 型マッピング。
  • 明示的な型付けのためのSQL型定数(例: mssql_python.SQL_DECIMAL)。
  • PythonでのNULL処理 None

トランザクションのサポート

  • 手動コミットとロールバック
  • オートコミットモード。
  • 隔離レベルの管理。
  • デッドロック検出と処理。

認証モード

Mode 説明
SQL Server認証 ユーザー名とパスワード
Windows 認証 Trusted_Connection
ActiveDirectoryDefault DefaultAzureCredential
ActiveDirectoryInteractive ブラウザベースのサインイン
ActiveDirectoryDeviceCode デバイス コード フロー
ActiveDirectoryPassword Microsoft Entra ユーザー名とパスワード(非推奨;ROPCを使用)
ActiveDirectoryMSI マネージド ID
ActiveDirectoryServicePrincipal サービス プリンシパル
ActiveDirectoryIntegrated Windows Kerberos

Upgrade

pyodbcより

詳細な移行ガイダンスについては、「 pyodbcからの移行」をご覧ください。

主な違い:

  • ?(qmark)と%(name)s(pyformat)パラメータスタイルの両方をサポートしています。 既存の ? クエリは変更なしで動作します。
  • callproc()方法はありません。 代わりに EXECUTE ステートメントを使いましょう。
  • 接続プーリングが搭載されています。
  • 外部ODBCドライバー依存性はありません。

pymssqlより

詳細な移行ガイダンスについては「 Migrate from pymssql」を参照してください。

主な違い:

  • %sおよび%dパラメータマーカーを?または%(name)sに置き換えます。
  • 位置論の代わりに接続文字列を使いましょう。
  • FreeTDSに依存していません。
  • 接続ごとに複数の同時カーソルがあります。
  • 属性アクセス権を持つ行オブジェクトが as_dict=Trueを置き換えます。

mssql-pythonのバージョン間

ドライバーをアップグレードして新機能や修正を手に入れましょう。

pip install --upgrade mssql-python

運用環境のシステムをアップグレードする前に、リリースノートを確認し、互換性を損なう変更がないか確認してください。

ロードマップ

今後の機能や開発ロードマップについては、GitHubリポジトリをご覧ください。