mssql-django 中的新增功能

本文介绍 Django 数据库后端的每个版本中的 mssql-django 新功能、改进和更改。

版本 1.7.3

发布日期:2026 年 6 月

版本 1.7.3 是一个向后兼容的补丁版本,包含两项与连接和运行时相关的修复。

故障修复

  • 对于除 ActiveDirectoryMsi 之外的 Authentication= 模式,FA001以前,后端仅对 ActiveDirectoryMsi 跳过 Trusted_Connection=yes。 其他未提供 USER 值的 Entra 模式(例如 ActiveDirectoryIntegratedActiveDirectoryDefaultActiveDirectoryDeviceFlow)仍会收到 Trusted_Connection=yes,而 ODBC 驱动程序会以 FA001Cannot use Authentication option with Integrated Security option)拒绝该值。 该修复程序通过边界感知且不区分大小写的匹配方式检测任何显式的 Authentication= 值,并跳过 Trusted_ConnectionIntegrated Security=SSPI。 密码处理保持不变:SqlPasswordActiveDirectoryPasswordActiveDirectoryServicePrincipal 继续发送 PWD,而 ActiveDirectoryInteractive 继续省略它。
  • KeyError 在子类化的 DatabaseWrapper:缓存的 sql_server_versionto_azure_sql_db 属性依赖于对 cached_propertytype(self).__dict__ 自省,这会在 DatabaseWrapper 子类第一次访问这些属性时引发 KeyError(这是在 1.7.1 中引入的回归)。 该修复使用通过 self. 访问的显式类级字典(_known_versions_known_azures),因此查找会通过 MRO 解析,子类化的包装器也能正常工作。

版本 1.7.2

发布日期:2026 年 5 月

版本 1.7.2 是一个向后兼容的补丁版本,包含时区和兼容性修复。

故障修复

  • .explain() Django 4.0 及更高版本的兼容性:修复了 Django 解释元数据的编译器处理,因此 .explain() 不再在 AttributeError Django 4.0 及更高版本中失败。 后端现在遵循符合相应版本的 explain 字段,并在需要时正确抛出 NotSupportedError
  • datetimeoffset 时区处理:修复了 datetimeoffset 的解析问题,从而保留时区偏移量而不是将其丢弃。 返回的日期时间现在会在预期情况下包含时区信息。
  • Now() with USE_TZ=True: 更新了 SQL 生成,以便在Now()启用时区支持时使用时区感知行为,从而阻止非 UTC SQL Server 主机上的时间戳偏移。

版本 1.7.1

发布日期:2026 年 4 月

版本 1.7.1 是一个向后兼容的补丁版本,包含错误修复。

故障修复

  • FieldDoesNotExist更改采用降序索引排序的字段时:修复了 _alter_field()schema.py 中解析索引字段名称时改为使用 index.fields_orders 而不是 index.fields 的问题。 前面的代码将原始的字段排序字符串(例如 "-pub_date")传递给 model._meta.get_field(),从而引发了 FieldDoesNotExist。 现在只提取字段名,并正确地忽略排序后缀。
  • 支持 Microsoft Fabric 中的 SQL 数据库(EngineEdition 12):将 Fabric 中的 SQL 数据库(EngineEdition=12)识别为 Azure 版本。 此前,Fabric 的引擎版别未被识别,导致 to_azure_sql_db 返回 False,并使功能门控检查失败。 该修复将EDITION_AZURE_SQL_FABRIC=12添加到_AZURE_EDITIONS,并将 Fabric 映射到最新受支持的 SQL Server 版本。 JSONField、哈希函数、排序规则反省和测试数据库拆解现在可在Fabric上正常工作。

版本 1.7

发布日期:2026 年 3 月

亮点

  • Django 6.0 支持:与 Django 6.0 完全兼容,这需要Python 3.12 或更高版本。 后端以透明方式处理所有 6.0 API 更改。
  • 部分 CompositePrimaryKey 支持:后端添加了对 Django 5.2 CompositePrimaryKey的部分支持。 针对子查询的元组比较需要 Django 5.2.4 及更高版本,并且某些组合键和 JSONField 的边缘情况仍然存在。 Django 5.2 本身首次在 mssql-django 1.6 中受支持。
  • SQL Server 2025 支持:根据 SQL Server 2025 进行验证。
  • ODBC 驱动程序 18 默认值:后端现在默认为 ODBC Driver 18 for SQL Server,如果未安装版本 18,则自动回退到 ODBC 驱动程序 17。

特定版本说明

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 年 8 月

  • 添加了 Django 5.1 和 5.2 支持。
  • 增强的 JSON 功能和向后兼容性。
  • 改进了管道基础结构。

版本 1.5

发布日期:2024 年 4 月

  • db_comments 添加了 supports_comments 功能标记。
  • AutoField、参数格式设置和架构查询的错误修复。

版本 1.4

发布日期:2024 年 1 月

  • 添加了 Django 5.0 支持。
  • 添加了 db_comment 支持。
  • 日期/时间转换和空聚合的错误修复。

版本 1.3

发布日期:2023 年 5 月

  • 添加了 Django 4.2 支持。
  • 新增了对大小写敏感 Replace 函数的支持。
  • 修复了 OFFSET 处理和左侧填充中的 Bug。

版本 1.2

发布日期:2022 年 12 月

  • 添加了 Django 4.1 支持。
  • 添加了时区支持 (datetimeoffset with USE_TZ=True) 。
  • 新增了用于批量插入时检索 ID 的 return_rows_bulk_insert 选项。
  • 添加了 SQL Server 2022 支持。
  • 新增了JSONField对 Azure SQL 托管实例 的支持。

版本 1.1

发布日期:2022 年 7 月

  • Django 3.2 和 4.0 支持。
  • SQL Server 2016 及更高版本,以及Azure SQL 数据库支持。
  • 基于 pyodbc 的连接。