白杨商业智能工作室
#技术分享#SQL Server

mssql-python 1.7.1 发布:SSH 隧道不卡了,PyPI 却装不下了

· 白杨BI工作室

mssql-python 1.7.1 是一个以 Bug 修复和性能优化为主的小版本,但这次发布比预期坎坷得多 —— PyPI 存储空间满了,差点发不出去。如果你的 Python 项目用 mssql-python 连 SQL Server,这个版本值得关注。

mssql-python 1.7.1 发布:SSH 隧道不卡了,PyPI 却装不下了

一句话总结

mssql-python 1.7.1 是一个以 Bug 修复和性能优化为主的小版本,但这次发布比预期坎坷得多 —— PyPI 存储空间满了,差点发不出去。如果你的 Python 项目用 mssql-python 连 SQL Server,这个版本值得关注。


先搞清楚:mssql-python 是啥?

很多国内开发者对 mssql-django(Django 的 SQL Server 后端)比较熟,但 mssql-python 是更底层的东西 —— 它是微软官方的 Python SQL Server 驱动,对标 pyodbc 但性能更好、API 更 Pythonic。简单说:

| 库 | 定位 | |---|---| | mssql-python | 官方 Python 驱动,直接调 ODBC,纯性能向 | | pyodbc | 社区驱动,通用 ODBC 封装 | | mssql-django | Django ORM 适配层,底层可能用 mssql-python |

💡 如果你的 ETL 脚本、数据分析管道、AI 应用直接用 Python 连 SQL Server,mssql-python 是目前官方推荐的方案。


1.7.1 核心更新

🔥 性能优化

  • UTF-16 字符串处理改用 simdutf + std::u16string 之前每次 Python 和驱动之间传字符串都会做编码转换,开销不小。1.7.1 用 simdutf(SIMD 加速的 Unicode 库)替代了旧逻辑,每次字符串往返的性能都有提升。

  • execute() 热路径加速 通过软重置、预处理语句缓存和按需诊断,把 execute() 的调用开销进一步压低了。高频调用场景(比如批量插入)收益明显。

🐛 6 个关键 Bug 修复

1. SSH 隧道不再挂起(issue #532)

这是社区反馈最集中的问题。很多企业用 paramiko + sshtunnel 建立 SSH 隧道连远程 SQL Server,但 mssql-python 在连接时会持有 GIL(全局解释器锁),导致 SSH 隧道线程无法工作,connect() 直接卡死。1.7.1 在 SQLSetConnectAttr 调用期间释放了 GIL,SSH 隧道场景恢复正常。

💡 国内不少企业为了安全,数据库不直接暴露公网,通过跳板机 SSH 隧道连接是常见做法。这个修复对这类场景是刚需。

2. 登录失败现在抛正确的异常

之前密码错误、账号不存在等登录失败直接抛 RuntimeError,1.7.1 改为抛 mssql_python.Error,更符合 Python 异常体系的预期,try/except 可以精确捕获了。

3. executemany 不再因小数符号变化报错(issue #557)

批量插入时,如果前一行是 1.5 后一行是 1,5(欧洲格式),会抛出 RuntimeError。修复后正确处理了不同行的 decimal 格式差异。

4. VARCHAR 编码一致性:Windows 和 Linux 输出一致了(issue #468)

CP1252 编码的 VARCHAR 字段在不同平台返回值不一样 —— Windows 上正常,Linux 上可能是乱码。1.7.1 统一了跨平台的编码处理。

如果你们的 SQL Server 有历史遗留的 Latin 编码数据,跑在 Linux ETL 服务器上终于不会再出现乱码了。

5. manylinux_2_28 构建目标

RHEL 8 / CentOS 8 用户现在可以直接拿 wheel 安装,不用再本地编译了。

6. macOS Python 3.10 universal2 wheel 修复

Apple Silicon 用户之前可能拿到的是 x86_64 wheel 走 Rosetta 翻译,现在是原生 ARM64。


PyPI 容量危机:「缺失的兆字节」

这次发布最有意思的部分在这里:1.7.0 版本因为 PyPI 存储配额耗尽被拒绝了。

为什么会满?

mssql-python 跟普通的纯 Python 包不一样 —— 它每个 wheel 都内嵌了 ODBC 驱动二进制文件,而且每个 wheel 都很大。支持的矩阵是:

Windows:   x64 / ARM64 / x86
macOS:     universal2
Linux:     manylinux x86_64 / aarch64 | musllinux x86_64 / aarch64
Python:    3.9 ~ 3.14

每个组合一个 wheel,每个 release 都会保留在 PyPI 上。几十个 release 堆下来,总大小直接撞上 PyPI 的项目存储上限。

短期措施:断舍离

为了把 1.7.1 发出去,团队清理了 PyPI 上的旧包:

  • ❌ 所有 1.0.0-alpha 版本
  • ❌ 所有 1.x.x-beta 版本
  • ❌ 已经传上去但被配额卡住的 1.7.0

老用户如果 pin 在 alpha/beta 版本上,需要升级到最新 GA:

pip install -U mssql-python

长期方案:拆分部署

清理旧包只是缓兵之计,团队正在从两个方向解决根本问题:

  1. 拆分 wheel 结构 — 把 ODBC 驱动二进制从主 wheel 中分离出去,让每个平台的安装包大幅缩小。目标是 pip install mssql-python 仍然一行搞定,但磁盘和 PyPI 占用缩小到现在的几分之一。

  2. 申请 PyPI 提高配额 — 这是常规操作,给赶时间的长远方案腾缓冲期。

🔍 这个 PyPI 容量问题其实是开源基础设施的一个有趣案例:当你的包本身是「基础设施的分发包」(自带原生二进制),PyPI 的存储模型就不够用了。node-sass、TensorFlow 等包也遇到过类似困境。


升级指南

pip install -U mssql-python

没有破坏性变更,直接原地升级即可。如果你之前 pin 了 alpha/beta 版本,确认代码兼容性后切到 ^1.7 即可。

有任何问题直接去 GitHub Issues 提 —— 团队承诺逐条回复。


版本兼容性

| 组件 | 支持版本 | |---|---| | Python | 3.9 ~ 3.14 | | SQL Server | 2017 / 2019 / 2022 / 2025 / Azure SQL | | ODBC Driver | 17 或 18 | | 平台 | Windows / macOS / Linux (glibc & musl) |


📌 原文链接:https://techcommunity.microsoft.com/t5/sql-server-blog/mssql-python-1-7-1-and-the-case-of-the-missing-megabytes/ba-p/4521991 📅 发布日期:2026-05-21

相关文章

微软重磅调整:Azure SQL弃用SGX加密意味着什么

微软重磅调整:Azure SQL弃用SGX加密意味着什么

微软 Azure SQL 数据库近日宣布,将正式停用基于英特尔 SGX 安全区域的 Always Encrypted 加密方案,这一变化标志着云端机密计算在数据库加密领域的一次重要技术路线调整。

#技术分享#Azure SQL
Azure SQL数据库中心性能监控来了,你的数据库终于有救了

Azure SQL数据库中心性能监控来了,你的数据库终于有救了

微软近日宣布,Azure SQL 数据库中心(Database Hub)的性能监控功能正式进入公共预览阶段,用户现可在统一门户中直接查看数据库运行指标,无需在多套工具间来回切换。

#技术分享#Azure SQL
微软Fabric数据库中心公共预览开放,数据开发迎来巨变

微软Fabric数据库中心公共预览开放,数据开发迎来巨变

数据库管理正在从被动运维走向主动洞察。微软近日宣布,Fabric 中的数据库中心(Database Hub)正式进入公共预览阶段,这项新能力将数据库运行信号转化为可执行的引导式操作,让数据资产的管理者第一次拥有了驾驶舱式的全局视野。

#技术分享#Azure SQL
SQL Server Always On终于支持多数据库MI链接了

SQL Server Always On终于支持多数据库MI链接了

微软近日宣布,Azure SQL 托管实例(MI Link)现已支持在 SQL Server 的 Always On 可用性组中同时连接多个数据库,该功能目前处于预览阶段。这意味着企业可以在混合云架构下,更灵活地实现多数据库的云端灾备与只读分流。

#技术分享#Azure SQL
Azure SQL数据库无服务器也能自动暂停?省钱大招来了

Azure SQL数据库无服务器也能自动暂停?省钱大招来了

微软近日宣布,Azure SQL 数据库的超大规模无服务器版本正式进入自动暂停与自动恢复功能的公开预览阶段。这意味着企业可以在业务低谷期让数据库自动休眠,在请求到来时秒级唤醒,从根本上重构云数据库的成本模型。

#技术分享#Azure SQL
SQL数据同步退役倒计时,你的数据库迁移方案准备好了吗

SQL数据同步退役倒计时,你的数据库迁移方案准备好了吗

微软近日宣布,Azure SQL 数据同步服务(SQL Data Sync)正式进入退役的最后阶段,该服务将不再支持新的同步组创建,现有用户需尽快迁移至替代方案。 - 停止新建同步组:用户已无法通过门户或 API 创建新的数据同步组,现有同步组仍可运行,但不再获得功能更新。

#技术分享#Azure SQL
有问题?加企业微信 1 对 1 交流 👇
➕ 添加企业微信
备注「白杨」优先通过 · 数据洞察与智能决策
企业微信
企业微信
备注「白杨」优先通过