Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются новые функции, улучшения и изменения в каждой версии серверной mssql-django части базы данных Django.
Версия 2.0
Дата выхода: сентябрь 2026
Версия 2.0 добавляет драйвер Microsoft mssql-python в качестве альтернативы pyodbc для отдельных баз данных, обновляет матрицу поддерживаемых версий Python, Django и SQL Server, а также включает исправления, связанные с совместимостью и надёжностью.
pyodbc остаётся драйвером по умолчанию.
Обзор матча
-
Поддержка драйвера mssql-python: Псевдоним базы данных подключается с помощью
"python_driver": "mssql_python"в своём словареOPTIONS. Драйвер поддерживает соединения, пул соединений, повторные попытки, транзакции и точки сохранения, значения datetimeoffset, интроспекцию и аутентификацию Microsoft Entra. Алиасы, в которых эта опция отсутствует, продолжают использоватьpyodbc, так что ничего не меняется, пока вы не подпишетесь на неё. Для получения дополнительной информации см. Выберите драйвер базы данных для mssql-django. -
Отдельной установки драйвера ODBC на пути mssql-python нет: псевдоним на
mssql-pythonне требует внешне установленного драйвера Microsoft ODBC для SQL Server. Псевдонимы, которые остаются наpyodbc, по-прежнему остаются. - Модернизированная матрица поддержки: Python 3.10–3.14, Django 5.2–6.1 и SQL Server 2017–2025. Django 6.0 и более поздние версии требуют Python 3.12 или новее.
Исправленные ошибки
-
Явно заданные параметры MARS учитываются: явно заданное значение
MARS_Connectionвextra_paramsсохраняется вместо замены значением Windows по умолчанию, а сравнение выполняется без учета регистра. ПараметрMARS_Connection=noтеперь работает с конечными точками, не поддерживающими MARS, включая Microsoft Fabric Warehouse. При отключённом MARS ORM буферизует результаты итерации перед их возвратом, чтобы вложенный запрос мог повторно использовать соединение, однако на больших наборах результатов это требует больше памяти. Это исправление соединения не добавляет полной поддержки Warehouse для миграций или других функций SQL Server. -
Символы-шаблоны в квадратных скобках экранируются при поиске по выражениям: при поиске по шаблону, где два поля сравниваются с помощью выражения
F(), напримерcontainsиstartswith, экранируется символ-шаблон SQL Server[. Символы в квадратных скобках обрабатываются как данные, а не как синтаксис подстановочных знаков. -
В именах схем inspectdb экранируются кавычки: одинарная кавычка в значении
inspectdb --schemaэкранируется в запросе к метаданным, поэтому имена схем, содержащие кавычку, больше не приводят к формированию некорректного Transact-SQL (T-SQL). -
Пустой HOST подключается к localhost при использовании mssql-python: Пропущенный
HOST, который Django подставляет как пустую строку, преобразуется вlocalhostвместо того, чтобы не пройти валидацию при пустом значенииSERVER=. Это поведение соответствуетpyodbcзначению по умолчанию для локальных экземпляров.
Improvements
-
pytz заменён на zoneinfo и tzdata: для обработки часовых поясов используется модуль стандартной библиотеки
zoneinfo, а пакетtzdataпредоставляет базу данных часовых поясов IANA в средах, где она не поставляется, например в Windows и минимальных образах контейнеров. Смещения остаются правильными в течение года для зон с отрицательным смещением летнего времени.pytzбольше не является зависимостью. -
Принимаются более новые версии SQL Server: основная версия SQL Server, которую бэкенд не распознаёт, использует последние возможности возможностей, о которых знает бэкенд, вместо того чтобы провалить проверку версии. Вы можете подключиться к новому релизу SQL Server до выхода соответствующего
mssql-djangoрелиза. Принятие соединения не объявляет непротестированные функции как поддерживаемые.
Кардинальные изменения
- Python 3.8 и 3.9, а также Django 3.2–5.1 больше не поддерживаются. Код совместимости для ранних версий остаётся в силе, но эти комбинации не тестируются и не перечисляются.
-
mssql-pythonВерсия 1.15.0 или более позднее является обязательной зависимостью, даже если псевдоним используетpyodbc. Установка ограничена платформами с совместимымmssql-pythonдистрибутивом, что исключает SUSE Linux на ARM64. Проекты на других платформах остаются на версии 1.8.0. - Заявленная поддержка SQL Server начинается с SQL Server 2017, а заявленная поддержка нативного подключения ограничена Microsoft ODBC Driver 17 и Microsoft ODBC Driver 18.
Версия 1.8.0
Дата выхода: август 2026
Версия 1.8.0 добавляет поддержку Django 6.1, продолжая поддерживать Django 3.2–6.0. Перенос проекта с Django 6.0 на 6.1 не требует изменений кода, если только вы не используете одну из двух функций Django 6.1, описанных в этом разделе.
Обзор матча
-
Поддержка Django 6.1: проверено на совместимость с Django 6.1 при сохранении поддержки Django с 3.2 по 6.0. Ограничение зависимостей расширяется от
django>=3.2,<6.1доdjango>=3.2,<6.2. -
Компилятор запросов использует
quote_nameв Django 6.1: в Django 6.1quote_name_unless_aliasобъявлен устаревшим. Бэкенд теперь вызываетSQLCompiler.quote_nameв Django 6.1 и более поздних версиях; это зависит от версии, поэтому более ранние версии Django остаются без изменений. Запросы со срезом и смещением, такие какqs[a:b]иOFFSET ... FETCH, компилируются без предупреждений об устаревании. -
При интроспекции внешнего ключа теперь возвращается правило ON DELETE: в Django 6.1 объект
get_relations()был расширен и теперь включает правило ON DELETE на уровне базы данных. Бэкенд возвращает ожидаемую трёхчастную структуру и соответствующим образом сопоставляет внешние ключи SQL ServerNO ACTION, поэтомуinspectdbи интроспекция внешних ключей создают корректные модели.
Функции Django 6.1, которые не поддерживаются
Два дополнения к Django 6.1 недоступны на этом бэкенде по разным причинам:
-
Референтные действия на уровне базы данных (
DB_CASCADE,DB_SET_NULL,DB_SET_DEFAULT): SQL Server отклоняет внешние графы ключей с несколькими каскадными путями к одной таблице (ошибка 1785), поэтому нет нативного пути для этой функции ни в одной версии SQL Server. Использование одного из этих значений повышает проверкуfields.E324системы Django , которая указывает на стандартный уровеньon_deleteDjango. -
Битовые агрегаты (
BitAnd,BitOr,BitXor): SQL Server не имеет нативной функции побитового агрегата, и бэкенд не эмулирует их, поэтому эти агрегаты повышаютNotSupportedError.
Дополнительные сведения см. в разделе "Ограничения" и неподдерживаемые функции в mssql-django.
Версия 1.7.4
Дата выхода: июль 2026
Версия 1.7.4 — это обратно совместимый патч с двумя исправлениями для обработки необработанных и аннотированных GROUP BY запросов.
Исправленные ошибки
-
IndexErrorв запросахGROUP BYс экранированными%%и реальными параметрами: Ранее любой запрос с условиемGROUP BYпроходил этап переписывания заполнителей, на котором выполнялся поиск%\w+и его замена на{}. Этот regex также совпадал с уходящими%%литералами, которые добавляли фантомные заполнятели и появлялисьIndexError: Replacement index N out of rangeвсякий раз, когда запрос комбинировал%%-escape с реальным%sпараметром. Суженное регулярное выражение теперь затрагивает только%%(сохранённый без изменений) и%s(реальный плейсхолдер), и это единственный шаблон, который компилятор вообще когда-либо генерирует. То же исправление также предотвращает несвязанную тихую ошибку, из-за которой неэкранированный шаблон, такой какLIKE '%abc%', в запросе без параметров перезаписывался какLIKE '{}%'и возвращал неверные строки. -
NotImplementedErrorдляIntegerChoicesв необработанныхGROUP BYзапросах: Ранее передача значенияIntegerChoicesв необработанный запрос, содержащий предложениеGROUP BY, вызывалаNotImplementedError: Not supported type <enum ...>. Вспомогательный код для типизации параметров использовал точные проверки типов (typ == int), иtype(IntegerChoices_value)— это класс перечисления, а неint, поэтому управление дошло до raise, хотя значение является подклассомint. Проверки типов теперь используютisinstance, аboolветвь оценивается перед ветвьюint(посколькуboolсамаintявляется подклассом). Варианты перечисления теперь привязываются правильно,boolпо-прежнему привязывается кBIT, а обычныйintне изменился.
Версия 1.7.3
Дата выпуска: июнь 2026 г.
Версия 1.7.3 — это выпуск исправлений с обратной совместимостью с двумя исправлениями подключения и среды выполнения.
Исправленные ошибки
-
FA001: Ранее серверная часть пропускалаAuthentication=только дляActiveDirectoryMsi. Другие режимы Entra, которые не предоставляют значениеUSER(например,ActiveDirectoryIntegrated,ActiveDirectoryDefault,ActiveDirectoryDeviceFlow), всё равно получалиTrusted_Connection=yes, которое драйвер ODBC отклонял с ошибкойFA001(Cannot use Authentication option with Integrated Security option). Исправление обнаруживает любое явно заданное значениеAuthentication=с учетом границ и без учета регистра, а также пропускает иTrusted_Connection, иIntegrated Security=SSPI. Обработка паролей не изменилась:SqlPassword,ActiveDirectoryPasswordиActiveDirectoryServicePrincipalпо-прежнему отправляютPWD, в то время какActiveDirectoryInteractiveпо-прежнему его не передаёт. -
KeyErrorдля подклассовDatabaseWrapper: кэшируемые свойстваsql_server_versionиto_azure_sql_dbзависели от интроспекцииtype(self).__dict__объектаcached_property, из-за чего при первом обращении подклассаKeyErrorк ним возникалоDatabaseWrapper(регрессия, внесённая в версии 1.7.1). Исправление использует явные словари класса (_known_versions,_known_azures), доступ к которым осуществляется черезself., поэтому поиск разрешается по MRO, и обёртки подклассов работают корректно.
Версия 1.7.2
Дата выпуска: май 2026 г.
Версия 1.7.2 — это патч-релиз, сохраняющий обратную совместимость и содержащий исправления, связанные с часовыми поясами и совместимостью.
Исправленные ошибки
-
.explain()Совместимость с Django 4.0 и более поздними версиями: исправлена обработка компилятором метаданных explain в Django, поэтому.explain()больше не приводит к сбою сAttributeErrorв Django 4.0 и более поздних версиях. Серверная часть теперь использует соответствующие версии поля explain и при необходимости корректно генерируетNotSupportedError. - Обработка часового пояса datetimeoffset: исправлен разбор datetimeoffset, поэтому смещения часового пояса сохраняются, а не отбрасываются. Возвращаемые значения даты и времени теперь содержат информацию о часовом поясе там, где это ожидается.
-
Now()withUSE_TZ=True: обновлена генерация SQL дляNow(): теперь при включенной поддержке часовых поясов используется поведение с учётом часового пояса, что предотвращает смещение меток времени на хостах SQL Server, не использующих UTC.
Версия 1.7.1
Дата выпуска: апрель 2026 г.
Версия 1.7.1 — это обратно совместимый патч-релиз с исправлениями ошибок.
Исправленные ошибки
-
FieldDoesNotExistпри изменении полей при убывающем порядке индексов: Исправлено_alter_field()вschema.py: теперь используетсяindex.fields_ordersвместоindex.fieldsпри определении имён полей индекса. Предыдущий код передавал необработанные строки полей с сортировкой (например,"-pub_date") вmodel._meta.get_field(), что вызывалоFieldDoesNotExist. Теперь извлекается только имя поля, а суффикс сортировки корректно отбрасывается. -
Поддержка базы данных SQL в Microsoft Fabric (EngineEdition 12): база данных SQL в Fabric распознается как редакция Azure (
EngineEdition=12). Ранее редакция движка Fabric не распознавалась, из-за чегоto_azure_sql_dbвозвращалFalse, а проверки флагов функций завершались сбоем. Исправление добавляетEDITION_AZURE_SQL_FABRIC=12в_AZURE_EDITIONSи сопоставляет Fabric с последней поддерживаемой версией SQL Server.JSONField, хэш-функции, анализ параметров сортировки и очистка тестовой базы данных теперь работают правильно в Fabric.
Версия 1.7
Дата выпуска: март 2026 г.
Обзор матча
- Поддержка Django 6.0: полная совместимость с Django 6.0, которая требует Python 3.12 или более поздней версии. Все изменения API 6.0 обрабатываются прозрачно серверной частью.
-
Частичная
CompositePrimaryKeyподдержка: Серверная часть добавляет частичную поддержку Django 5.2CompositePrimaryKey. Для сравнения кортежей с подзапросами требуется Django версии 5.2.4 или новее, при этом некоторые крайние случаи со составными ключами иJSONFieldостаются. Django 5.2 впервые поддерживается в mssql-django 1.6. - поддержка SQL Server 2025: проверена на SQL Server 2025.
- Драйвер ODBC 18 по умолчанию: серверная часть по умолчанию использует драйвер ODBC 18 для SQL Server, при этом автоматический возврат к ODBC Driver 17, если версия 18 не установлена.
Заметки для конкретной версии
| Версия Django | Примечания |
|---|---|
| Django 5.1 |
inspectdb может проверять таблицы с составными первичными ключами, но для них не создаются полные определения моделей. |
| Django 5.2 |
CompositePrimaryKey поддержка является частичной. Для сравнения кортежей с вложенными запросами требуется Django 5.2.4 или более поздней версии, а некоторые варианты миграции и JSONField пограничные варианты остаются. |
| Django 6.0 | Требуется Python 3.12 или более поздней версии. Применяются все ограничения 5.2. |
Версия 1.6
Дата выпуска: август 2025 г.
- Добавлена поддержка Django 5.1 и 5.2.
- Расширенная функциональность JSON и обратная совместимость.
- Улучшенная инфраструктура конвейера.
Версия 1.5
Дата выпуска: апрель 2024 г.
- Добавлен
supports_commentsфлаг функции дляdb_comments. - Исправлены ошибки, связанные с
AutoField, форматированием параметров и запросами к схеме.
Версия 1.4
Дата выпуска: январь 2024 г.
- Добавлена поддержка Django 5.0.
- Добавлена поддержка
db_comment. - Исправления ошибок в преобразованиях даты/времени и пустых агрегатах.
Версия 1.3
Дата выпуска: май 2023 г.
- Добавлена поддержка Django 4.2.
- Добавлена поддержка
Replaceчувствительных к регистру функций. - Исправления ошибок для
OFFSETобработки и левого заполнения.
Версия 1.2
Дата выпуска: декабрь 2022 г.
- Добавлена поддержка Django 4.1.
- Добавлена поддержка часовых поясов (datetimeoffset с
USE_TZ=True). - Добавлен параметр
return_rows_bulk_insertдля получения идентификаторов при массовой вставке. - Добавлена поддержка SQL Server 2022.
- Добавлена
JSONFieldподдержка Управляемый экземпляр SQL Azure.
Версия 1.1
Дата выпуска: июль 2022 г.
- Поддержка Django 3.2 и 4.0.
- Поддерживаются SQL Server 2016 и более поздние версии, а также База данных SQL Azure.
- Подключение на основе
pyodbc.