mssql-python 1.17.0
This release makes bulk copy more reliable, improves connection-pool performance and recovery, corrects multi-result row counts, and restores PEP 249 Timestamp() compatibility.
Release Highlights
More Reliable Bulk Copy (#860, #875)
- What changed: Bulk copy now works reliably after package upgrades, handles UTF-8 text correctly, rejects unsupported destination names early, and preserves full SQL Server datetime precision.
- Who benefits: Applications using
bulkcopy()orbulkcopy_arrow(), especially after an upgrade or when loading Unicode and high-precision temporal data. - Impact: Fewer upgrade failures, correct Unicode values, clearer destination-name errors, and no silent loss of datetime precision.
PR #860 | PR #875 | GitHub Issues #855, #843, #849, #869 | Thanks @Jhonatas2 and @oscarrobertson for the contributions.
pip install --upgrade mssql-pythonView mssql-python 1.17.0 on PyPI
Enhancements
Faster Connection Pool Reuse (#820)
- What changed: Clean pooled connections can be returned and reused with less redundant cleanup work.
- Who benefits: Applications that frequently acquire and return pooled connections.
- Impact: Lower connection-reuse overhead while preserving transaction safety.
PR #820
Bug Fixes
Faster Recovery from Dead Pooled Connections (#859)
- What changed: Connection checkout stops waiting on an unresponsive pooled connection after the configured login timeout and opens a replacement.
- Who benefits: Applications using connection pooling across unreliable or interrupted network connections.
- Impact: Applications recover predictably instead of hanging for many minutes on a dead pooled connection.
Accurate nextset() Row Counts (#864)
- What changed:
Cursor.nextset()now refreshesrowcountfor each subsequent data-modification result and resets it for row-producing results. - Who benefits: Applications processing multi-statement batches, stored procedures, or T-SQL loops with multiple results.
- Impact: Each result reports its own affected-row count instead of retaining the count from the first statement.
PR #864 | GitHub Issue #863 | Thanks @phelipelui for the contribution.
PEP 249 Timestamp() Compatibility (#872)
- What changed: The
microsecondargument is optional and defaults to zero. - Who benefits: Applications using the standard six-argument DB-API
Timestamp(year, month, day, hour, minute, second)constructor. - Impact: PEP 249-compatible calls no longer fail with a missing-argument
TypeError.
PR #872 | GitHub Issue #871 | Thanks @austinaviv for the contribution.