mssql-django 中的新增功能

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

版本 1.7.3

发布日期:2026 年 6 月

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

故障修复

  • FA001 对于 ActiveDirectoryMsi 以外的 Authentication= 模式:以前,后端仅对 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 继续省略它。
  • 子类化 DatabaseWrapper 上的 KeyError:缓存的 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 当以降序索引排序更改字段时:修复 schema.py 中使用 index.fields_orders 而非 index.fields 来解析索引字段名称的 _alter_field()。 以前的代码将原始字段带排序字符串(例如 "-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 的连接。