本文介绍 Django 数据库后端的每个版本中的 mssql-django 新功能、改进和更改。
版本 1.7.3
发布日期:2026 年 6 月
版本 1.7.3 是一个向后兼容的补丁版本,包含两项与连接和运行时相关的修复。
故障修复
-
对于除
ActiveDirectoryMsi之外的Authentication=模式,FA001:以前,后端仅对ActiveDirectoryMsi跳过Trusted_Connection=yes。 其他未提供USER值的 Entra 模式(例如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属性依赖于对cached_property的type(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()不再在AttributeErrorDjango 4.0 及更高版本中失败。 后端现在遵循符合相应版本的 explain 字段,并在需要时正确抛出NotSupportedError。 - datetimeoffset 时区处理:修复了 datetimeoffset 的解析问题,从而保留时区偏移量而不是将其丢弃。 返回的日期时间现在会在预期情况下包含时区信息。
-
Now()withUSE_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.2CompositePrimaryKey的部分支持。 针对子查询的元组比较需要 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的连接。