この記事では、Microsoft Fabric の SQL Server、Azure SQL Database、Azure SQL Managed Instance、SQL データベースの mssql-django Django バックエンドに関してよく寄せられる質問に回答します。
General
mssql-django とは
mssql-django パッケージは、SQL Server用のMicrosoft管理された Django データベース バックエンドです。 これにより、Django アプリケーションは pyodbc ドライバーを使用して、Microsoft Fabric内の SQL Server、Azure SQL Database、Azure SQL Managed Instance、および SQL データベースに接続できます。
pip を使用してインストールします。
pip install mssql-django
mssql-django はどのバージョンの Django をサポートしていますか?
mssql-django パッケージ v1.7 では、Django 3.2、4.0、4.1、4.2、5.0、5.1、5.2、6.0 がサポートされます。 完全な互換性マトリックスについては、 サポート ライフサイクル を確認してください。
サポートされているPythonのバージョンは何ですか?
mssql-django パッケージは、Python 3.8 以降をサポートしています。 特定のPythonバージョンも Django バージョンと互換性がある必要があります。 たとえば、Django 5.0 には Python 3.10 以降のバージョンが必要であり、Django 6.0 には Python 3.12 以降のバージョンが必要です。 完全な互換性マトリックスについては、 サポート ライフサイクル を参照してください。
mssql-django はMicrosoftによって維持されますか?
コンフィギュレーション
settings.py ではどの ENGINE 値を使用しますか?
ENGINEを"mssql"構成でDATABASESに設定します。
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>",
},
}
どの ODBC ドライバーを使用する必要がありますか?
SQL Server Microsoft ODBC Driver 18 を使用します。 これは mssql-django 1.7 以降の既定値であり、バージョン 18 がインストールされていない場合、バックエンドは自動的に ODBC Driver 17 にフォールバックします。 特定のバージョンをピン留めする必要がある場合にのみ、 OPTIONS ディクショナリでドライバーを明示的に指定します。
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
Azure SQL Databaseに接続するにはどうすればよいですか?
ポート 1433 を付けた完全修飾サーバー名を使用してください:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Microsoft Entra認証を使用する方法
extra_paramsまたはOPTIONS設定でTOKENを使用します。
TOKEN設定は、azure.identityやDefaultAzureCredentialなど、任意のManagedIdentityCredential資格情報で動作します。
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token
"TOKEN": token,
サポートされているすべての方法については、Microsoft Entra認証を参照してください。
特徴
mssql-django は JSONField をサポートしていますか?
はい。JSONFieldは、SQL Server 2016 以降でサポートされています。 JSON データは nvarchar(max) として格納され、SQL Serverの JSON 関数を使用してクエリされます。 サポートされている参照と制限については、 JSONField のサポート を参照してください。
mssql-django はタイム ゾーン対応の datetimes をサポートしていますか?
Yes.
USE_TZ=Trueすると、Django はSQL Serverの datetimeoffset データ型を使用します。 既存のデータベースを移行する場合は、既存の datetime2 列を変更する必要があります。
タイム ゾーンのサポートを参照してください。
ストアド プロシージャを呼び出すことができますか?
Yes. ストアド プロシージャを呼び出すには、connection.cursor()でcursor.execute()を使用します。 複数のパラメーターと結果セットを含む例については、 ストアド プロシージャを 参照してください。
BULK_CREATEは ID を返しますか?
既定では、いいえ。
return_rows_bulk_insert オプションの既定値は False です。 一括挿入後に ID を返せるように、データベース TrueでOPTIONSに設定します。 このオプションは、トリガーを含むテーブルに対して False のままにする必要があります。
一括操作を参照してください。
Troubleshooting
"ODBC ドライバーが見つかりません" というエラーが表示されます。 これを解決するにはどうすればいいですか?
Microsoft ODBC Driver for SQL Serverをインストールします。 Linux では、最初に Microsoft APT リポジトリを追加してから、ドライバーをインストールします。
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
ACCEPT_EULA=Y sudo apt-get install -y msodbcsql18
Windowsで、Microsoft Web サイトからインストーラーをダウンロードします。 macOS では、Homebrew を使用します。
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18
プラットフォーム固有の完全な手順については、「 インストール 」を参照してください。
" IDENTITY 列を変更できません" で移行が失敗する理由
SQL Server では、列を IDENTITY(AutoField)列に変更したり、IDENTITY(AutoField)列から変更したりすることはサポートされていません。 目的のフィールド型を使用して新しいモデルを作成し、データを手動で移行します。
mssql-django の制限事項とサポートされていない機能を参照してください。
bulk_update はなぜ NULL 許容フィールドで失敗するのですか?
mssql-django 1.7 では、バックエンドは、すべて NULL 更新を自動的に処理します。 以前のバージョンでは、SQL Server の型推論エラーを引き起こす CASE WHEN ... THEN NULL 式での NULL を回避するため、bulk_update で default パラメーターを使用してください。
Product.objects.bulk_update(products, ["description"], default="")
詳細については、 一括操作 を参照してください。