pypi mssql-python 1.14.0
Release Notes - Version 1.14.0

5 hours ago

Enhancements

• Faster Parameter Detection and Execution (#549)

What changed: Parameter type detection and binding now run in a single native C++ pipeline, removing per-parameter Python and pybind11 overhead from the standard execute() path.
Who benefits: Applications with wide parameterized statements and batched execute workloads.
Impact: Parameter detection is approximately 60 times faster; benchmarks showed about 50% faster execution for statements with 50 or more parameters and 1.5-1.6 times higher end-to-end throughput in representative bulk insert scenarios.

PR #549 | GitHub Issue #500

Bug Fixes

• Bulk Copy Accepts timeout=0 (#698)

What changed: bulkcopy() now passes a zero timeout through as an unlimited timeout, matching the BCP API contract, while still rejecting negative, non-integer, and boolean values.
Who benefits: Users who explicitly disable bulk-copy timeouts with timeout=0.
Impact: The documented no-timeout behavior now works instead of raising a validation error.

PR #698 | GitHub Issue #697

• Arrow Reader Fetch Exceptions Are Preserved (#718)

What changed: Defensive Arrow cursor cleanup now checks cursor state before cleanup and no longer raises a secondary error that replaces the original fetch exception.
Who benefits: Applications that consume Arrow result batches and encounter a fetch failure.
Impact: Callers now receive the actual fetch error, making failures accurate and diagnosable.

PR #718 | GitHub Issue #712

• Decimal Conversion Errors No Longer Expose Parameter Values (#719)

What changed: executemany() Decimal conversion failures now report only row index, column index, and value type. Potentially value-bearing exception causes are suppressed so sensitive data cannot leak through chained tracebacks.
Who benefits: Applications that log or export database exceptions to monitoring and APM systems.
Impact: Invalid Decimal parameters remain diagnosable without exposing parameter rows, personally identifiable information, or secrets.

PR #719

• Arrow View Types Work in Bulk Copy (#729)

What changed: The bundled mssql_py_core 0.1.9 adds support for Arrow View types, with end-to-end coverage for Polars string_view columns passed directly through the Arrow C Data Interface.
Who benefits: Polars users and other Arrow producers that export variable-length View arrays to bulkcopy_arrow().
Impact: String View values and NULLs now round-trip correctly without requiring conversion through DataFrame.to_arrow().

PR #729 | GitHub Issue #708 - Thanks @gargsaumya for the contribution! (via mssql_py_core)

connect(timeout=) Sets the Login Timeout (#728)

What changed: The constructor timeout is now applied as SQL_ATTR_LOGIN_TIMEOUT instead of a per-statement query timeout; query timeout remains independently configurable through Connection.timeout, and both entry points validate values consistently.
Who benefits: Users who need connection attempts to fail within a predictable time while allowing long-running queries.
Impact: connect(timeout=N) now bounds login attempts as documented and no longer aborts queries after N seconds.

PR #728 | GitHub Issue #725

• Windows Extension Loading Uses Interpreter Architecture (#727)

What changed: On Windows, the native extension loader now derives architecture from the running Python interpreter instead of the host CPU and emits fallback notices as warnings rather than writing to stdout.
Who benefits: Users running x64 Python on Windows ARM64 hosts and tools that require clean stdout during import.
Impact: The loader selects the win_amd64 extension directly, avoiding repeated fallback loading and stray import output.

PR #727 | GitHub Issue #726 - Thanks @Om-singhaI for the contribution!

Don't miss a new mssql-python release

NewReleases is sending notifications on new releases.