mssql-django についてよく寄せられる質問

この記事では、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によって維持されますか?

Yes. mssql-django パッケージはMicrosoftによって管理され、PyPI および GitHub で使用できます。

コンフィギュレーション

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.identityDefaultAzureCredentialなど、任意の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 を返せるように、データベース TrueOPTIONSに設定します。 このオプションは、トリガーを含むテーブルに対して 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_updatedefault パラメーターを使用してください。

Product.objects.bulk_update(products, ["description"], default="")

詳細については、 一括操作 を参照してください。