Часто задаваемые вопросы о mssql-django

В этой статье приведены ответы на часто задаваемые вопросы о mssql-django бэкенде Django для SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure и базы данных SQL в Microsoft Fabric.

General

Что такое mssql-django?

Пакет mssql-django — это серверная часть базы данных Django, поддерживаемая Microsoft для SQL Server. Это позволяет приложениям Django подключаться к SQL Server, База данных SQL Azure, Управляемый экземпляр SQL Azure и базе данных SQL в Microsoft Fabric с помощью драйвера pyodbc.

Установите его с помощью pip:

pip install mssql-django

Какие версии Django поддерживают mssql-django?

Пакет mssql-django версии 1.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.

Конфигурация

Какое значение ENGINE следует использовать в settings.py?

Установите значение ENGINE"mssql" в DATABASES конфигурации:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "HOST": "<your-server>",
    },
}

Какой драйвер ODBC следует использовать?

Используйте Microsoft драйвер ODBC 18 для SQL Server. Он используется по умолчанию в mssql-django 1.7 и более поздних версиях, а серверная часть автоматически переключается на ODBC Driver 17, если ODBC Driver 18 не установлен. Укажите драйвер явным образом в OPTIONS словаре, только если необходимо закрепить определенную версию:

"OPTIONS": {
    "driver": "ODBC Driver 18 for SQL Server",
},

Как подключиться к База данных SQL Azure?

Используйте полное имя сервера с портом 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.

Features

Поддерживает ли mssql-django JSONField?

Да, JSONField поддерживается в SQL Server 2016 и более поздних версий. Данные JSON хранятся как nvarchar(max) и запрашиваются с помощью функций JSON SQL Server. См. поддержку JSONField для получения сведений о поддерживаемых операциях поиска и ограничениях.

Поддерживает ли mssql-django значения даты и времени с учетом часового пояса?

Yes. Когда USE_TZ=True, Django использует в SQL Server тип данных datetimeoffset. При переносе существующей базы данных необходимо изменить существующие столбцы datetime2 . См. сведения о поддержке часового пояса.

Можно ли вызывать хранимые процедуры?

Yes. Используйте connection.cursor() с cursor.execute() для вызова хранимых процедур. См. хранимые процедуры для примеров с несколькими параметрами и наборами результатов.

Возвращает ли bulk_create идентификаторы?

По умолчанию нет. Для параметра return_rows_bulk_insert по умолчанию установлено значение False. Установите в базе данных OPTIONS значение True, чтобы включить возврат идентификаторов после пакетной вставки. Этот параметр должен оставаться False для таблиц с триггерами. См. статью "Массовые операции".

Troubleshooting

Я получаю "Драйвер ODBC не найден". Как это исправить?

Установите драйвер ODBC Microsoft для SQL Server. В Linux сначала добавьте репозиторий APT Microsoft, а затем установите драйвер:

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. В 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. В более ранних версиях используйте параметр default в bulk_update, чтобы избежать NULL в выражениях CASE WHEN ... THEN NULL, что приводит к ошибкам вывода типов в SQL Server:

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

Дополнительные сведения см. в статье "Массовые операции ".