В этой статье приведены ответы на часто задаваемые вопросы о 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?
Конфигурация
Какое значение 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="")
Дополнительные сведения см. в статье "Массовые операции ".