バージョン2.0以降は、mssql-django2つのPythonデータベースドライバのいずれかを介して接続されます。
- 外部にインストールされたMicrosoft ODBCドライバーfor SQL Serverを用いるpyodbc。 このドライバーがデフォルトです。
- mssql-python、MicrosoftのPythonドライバーで、別途ODBCドライバーをインストールする必要はありません。
各データベースのエイリアスごとにドライバーを選択します。 1つのエイリアスでは mssql-python を使用し、プロジェクトの他の部分では引き続き pyodbc を使用できます。
ENGINE価値はどちらの場合も依然として"mssql"です。
mssql-pythonにエイリアスを選んでください
その別名のOPTIONS辞書でpython_driverオプションを設定してください:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<database>",
"USER": "<user_id>",
"PASSWORD": "<password>",
"HOST": "<server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"python_driver": "mssql_python",
"extra_params": "Encrypt=yes",
},
},
}
バックエンドは "mssql_python"、 "mssql-python"、 "python"を受け入れ、比較は大文字を無視します。
python_driverを省略するか、空のままにするか、デフォルトのドライバーを保つために"pyodbc"に設定してください。 設定がエイリアスごとに設定されているため、オプションを削除して1つのデータベースごとにロールバックします。
mssql-pythonモジュールはエイリアスが選択した場合にのみインポートされます。 インストールされたバージョンが1.15.0より古い場合は、バックエンドが必要なバージョンで ImproperlyConfigured を上げます。
インストールの要件
pip install mssql-django 両方のドライバーをインストールします。
mssql-pythonパスには別のODBCドライバーのインストールはありません。
--no-depsインストールや、mssql-pythonをミラーしないプライベートインデックスの場合、パッケージが抜けてしまい、インポート時にエイリアスが失敗します。
macOSではOpenSSL、Linuxでは必要なライブラリなど、 mssql-pythonのプラットフォーム前提条件をインストールしてください。
mssql-python依存関係が必須であるため、mssql-django 2.0は互換性のあるmssql-pythonディストリビューションを持つプラットフォームにのみインストールされます。 プラットフォーム一覧については、 mssql-djangoのサポートおよびライフサイクルをご覧ください。
動作の違い
2つのドライバーは異なる接続文字列を構築し、異なる接続キーワードを公開します。 エイリアスを変更する前にこのセクションを確認してください。
接続設定
| Setting | pyodbc | mssql-python |
|---|---|---|
HOST と PORT |
ドライバーとPORTに応じて、host_is_server、SERVER、またはSERVERNAMEに加えてSERVERとして出力されます。 |
常に SERVER=<host>,<port>として発光されます。 空っぽの HOST は localhostになります。 |
driver |
ODBCドライバーを選択します。 既定では Microsoft ODBC Driver 18 for SQL Server を使用し、自動的に Driver 17 にフォールバックします。 | 無視されます。 ドライバー17のフォールバックはありません。 |
dsn |
Supported. | 無視されます。 |
host_is_server |
FreeTDSでサポートされています。 | 無視されます。 |
unicode_results |
Supported. | 無視されます。 |
TOKEN |
Supported. | Supported.
PASSWORD、Authentication、または TOKEN キーワードを指定せずに USER を指定します。 アプリケーションはトークンを取得し、更新します。 |
DATABASE_CONNECTION_POOLING |
適用。 | 適用。 |
タイムアウト、リトライ、アイソレーションレベル、コレーション、 return_rows_bulk_insert は両方のパスで同じ挙動を示します。
追加の接続パラメータ
mssql-python 1.15は許可リストに対して extra_params を検証し、それ以外のものは拒否します。 対応キーワードには Authentication、 Encrypt、 TrustServerCertificate、 HostnameInCertificate、 ServerCertificate、 ServerSPN、 MultiSubnetFailover、 ApplicationIntent、 ConnectRetryCount、 ConnectRetryInterval、 KeepAlive、 KeepAliveInterval、 IpAddressPreference、 PacketSizeなどがあります。
ドライバーは DRIVER、 DSN、 SERVERNAME、 MARS_Connectionといった、pyodbc専用のキーワード( APP、 LongAsMax、 ColumnEncryption、 WSID、 AnsiNPW、 QuotedId、 Regional、 UseFMTONLY、 Current Language、 Network Library、 Description、 Connect Timeoutなどのpyodbc専用キーワードを拒否します。 エイリアスを切り替える前にこれらのキーワードを削除し、Connect Timeoutの代わりにconnection_timeoutオプションを使いましょう。
extra_paramsがバックエンドも生成するキーワードを設定すると、明示的な価値が勝ちます。
複数のアクティブな結果セット
pyodbcパスでは、エイリアスがMicrosoft ODBCドライバーをWindowsに使用した場合、バックエンドがMARS_Connection=yesを追加します。 代わりにextra_paramsの明示的なMARS_Connection値が尊重され、マッチは大文字を無視します。
mssql-pythonパスはMARSを有効にせず、MARS_Connectionキーワードも拒否するため、そのエイリアスでMARSを有効にすることはできません。
MARSがなければ、 QuerySet.iterator() は行を出す前に結果全体をメモリに読み込み、ネストされたクエリが接続を再利用できるようにしますが、 chunk_size はそれを変えません。 大規模なクエリセットでのメモリコストを考慮してください。
Microsoft Fabric WarehouseのようにMARSを拒否するエンドポイントについては、「MARSを無効化」を参照してください。
エンコード設定
両ドライバーは setencoding と setdecodingを受け入れ、各エントリーは選択したドライバーの接続方法に送られます。 すべての setdecoding 入力には両方のパスで sqltype キーが必要で、同じエントリーがどちらのドライバーでも動作します。 一つ違いがあります。mssql-pythonSQL_WMETADATA-99を受け入れ、pyodbcは拒否します。
ドライバーのどちらかを選んでください
新しい開発では、 mssql-pythonを使用します。 コンテナイメージやアプリサービスの展開からODBCドライバーのインストールステップを除去します。
デプロイが名前付きのDSN、FreeTDS、ColumnEncryptionキーワードによるAlways Encrypted、自分で管理するODBCドライバーバージョン、またはMARSに依存している場合にpyodbc使ってください。 各パスでMARSが何を求めているかについては 、「複数のアクティブ結果セット」を参照してください。
既存のプロジェクトは引き続き pyodbc を使用できます。 これはデフォルトであり、完全にサポートされています。 移動するときは、一度に1つのエイリアスを切り替え、テストスイートをそのエイリアスで処理してから他のエイリアスを移動させてください。