Novedades en mssql-python

Este artículo enumera qué cambió en cada versión del controlador mssql-python, lo más reciente es lo primero. Cada sección cubre nuevas funcionalidades, cambios de comportamiento y correcciones de errores para una versión.

Para las versiones que Microsoft soporta actualmente, véase Ciclo de vida de soporte.

MSSQL-Python 1.14.0

Fecha de lanzamiento: agosto de 2026

Enhancements

La detección y enlace de parámetros se ejecuta en código nativo

La detección y vinculación de tipos de parámetros ahora se ejecutan en una única tubería nativa en lugar de llamadas Python por parámetro. Este cambio soluciona un importante cuello de botella en el rendimiento, con mejoras de mayor rendimiento de extremo a extremo en operaciones más grandes, como insertos a granel. No es necesario cambiar la solicitud.

Correcciones de errores

El timeout argumento para connect() establecer el tiempo de tiempo de espera de la consulta en lugar del de autenticación

El timeout argumento ahora establece SQL_ATTR_LOGIN_TIMEOUT y limita el intento de autenticación, que es lo que describen el nombre del argumento y la documentación. En versiones anteriores se convirtió en el tiempo límite de consulta por sentencia, por lo que connect(timeout=30) no limitaba cuánto podía durar un intento de conexión, y abortaba las consultas tras 30 segundos. El tiempo de espera de consulta por estado sigue disponible como la Connection.timeout propiedad.

Importante

Si pasas timeout a connect() abortar consultas de larga duración, ese comportamiento ya no ocurre. En su lugar, en su lugar Connection.timeout . Lo mismo ocurre si connect(timeout=) dependiste de ampliar el tiempo de espera de conexión que bulkcopy() usa para su conexión interna: configúralo Connection.timeout antes de crear el cursor.

Para más información, véase Tiempo de espera de conexión.

bulkcopy() rechazado timeout=0

Un error de 0 validación generó, aunque 0 significa que no hay timeout tiempo de espera en la API de copia masiva subyacente. El método ahora acepta 0 y desactiva el tiempo de espera de la operación. Los valores negativos, no enteros y booleanos siguen siendo rechazados.

Para más información, véase Copia masiva.

La limpieza sustituyó a la excepción original de obtención de Arrow

Cuando fallaba una búsqueda de un lector Arrow, la ruta de limpieza del controlador generaba un segundo error que reemplazaba al original, por lo que los llamantes veían un fallo de limpieza en lugar de la razón por la que fallaba la búsqueda. Ahora la limpieza comprueba primero el estado del cursor y conserva la excepción original.

executemany() Los errores de conversión decimal incluían valores de parámetros

Un fallo en la conversión decimal reportaba executemany() el valor infractor a través de la excepción encadenada, lo que podía colocar los datos del cliente en registros de aplicaciones y sistemas de monitorización. El error ahora solo informa del índice de fila, del índice de columna y del tipo de valor.

Para obtener más información, consulte Control de errores.

Copia masiva rechazada de tipos de Vista de Flecha

bulkcopy_arrow() no podían consumir matrices de Arrow View de longitud variable, así que las columnas Polars string_view debían convertirse primero con DataFrame.to_arrow() ellas. Los valores de la Vista de Cadenas y los NULLs pasan ahora directamente por la Interfaz de Datos Arrow C.

Para más información, véase integración de Polars.

La carga de extensiones de Windows utilizaba la arquitectura de la CPU anfitriona

En Windows, el controlador elegía su extensión nativa en función de la CPU del host en lugar del intérprete en ejecución, así que x64 Python en un host ARM64 se cargaba a través de una ruta de respaldo y escribía avisos en stdout. El cargador ahora deriva la arquitectura del intérprete y reporta los retrocesos como advertencias.

MSSQL-Python 1.13.0

Fecha de lanzamiento: agosto de 2026

Enhancements

Los binarios controladores ODBC solo se envían en mssql-python-odbc

La versión 1.13.0 elimina el libs/ respaldo de la mssql-python rueda y declara mssql-python-odbc==18.6.2.1 en install_requires. El comando pip install mssql-python sigue produciendo un controlador funcional. Instala explícitamente mssql-python-odbc cuando instales con --no-deps, o desde un índice privado que no lo refleje.

Para obtener más información, consulte Instalación.

Copia masiva de fuentes Apache Arrow

El nuevo cursor.bulkcopy_arrow() método carga datos que ya están en formato Apache Arrow, sin convertir primero cada fila a objetos Python. Pasar una fuente de flechas a bulkcopy() ahora eleva TypeError.

Para más información, consulta integración con Apache Arrow y copia masiva.

token_providerparameter for Microsoft Entra credentials

La connect() función y la Connection clase aceptan un token_provider argumento, por lo que puedes pasar un objeto de credencial como DefaultAzureCredential en lugar de nombrar un modo de autenticación en la cadena de conexión. El argumento es mutuamente excluyente con la Authentication palabra clave y con los tokens que pasan por attrs_before, y solo soporta el alcance comercial de la nube de Azure.

Para más información, consulte Autenticación de Microsoft Entra.

Agrupación de conexiones consciente de identidad

El conjunto de conexiones ahora separa las conexiones por identidad Microsoft Entra. En versiones anteriores, el pool solo se asignaba a la cadena de conexión, por lo que el pool podía entregar una conexión autenticada como un usuario a una solicitud hecha por otro. El controlador también adquiere un token solo cuando una solicitud de conexión falla en el pool, y actualiza una conexión agrupada cuando su token está dentro de los 5 minutos de expiración.

Para más información, consulte Agrupación de conexiones.

Correcciones de errores

executemany() insertaba filas cero cuando aparecían los NULLs después de la primera fila

Una llamada que mezclaba valores numéricos no NULL y NULL insertaba cero filas y no generaba executemany() ninguna excepción, cuando el primer NULL aparecía después de la primera fila. Este comportamiento afectaba a parámetros de tinyint, smallint, int y float . El controlador ahora inicializa indicadores ODBC para cada parámetro numérico de ancho fijo antes de la ejecución del array.

Un SQL_WVARCHAR convertidor de salida transformaba columnas no de cadena

Registrar un convertidor de una sola cadena también transformaba los valores int, decimal y de fecha , porque el controlador volvía al SQL_WVARCHAR convertidor para cualquier columna sin su propio convertidor. El controlador ahora usa ese respaldo solo cuando el tipo de Python mapeado de la columna es str o bytes.

Los convertidores de salida registrados por código SQL entero nunca se ejecutaron

Los convertidores registrados con un código entero de tipo SQL, como SQL_DECIMAL, se almacenaban pero nunca se invocaban, porque el controlador solo se despachaba en el tipo Python en cursor.description. El controlador ahora despacha primero el código entero, luego el tipo Python y finalmente el SQL_WVARCHAR respaldo.

Importante

Si registraste convertidores por código SQL entero en una versión anterior, esos convertidores empiezan a funcionar cuando actualizas. Revísalos antes de desplegarlos, porque los valores de columna que antes pasaban sin cambios ahora se transforman.

Para más información, véase Convertidores de tipo personalizado.

Cerrar un lector Arrow no liberó el cursor del lado del servidor

Cerrar un lector Arrow dejaba asignado el cursor del lado del servidor y el padre Cursor en un estado inconsistente, porque cursor.arrow_reader() devolvía un archivo raw pyarrow.RecordBatchReader. El método ahora devuelve un envoltorio cuyo close() método libera el cursor del lado del servidor y reinicia el estado del cursor, y el envoltorio funciona como gestor de contexto.

Para más información, véase integración con Apache Arrow.

Un cursor parcialmente inicializado se levanta AttributeError en Cursor.__del__

Un cursor cuyo inicializador falló levantó a AttributeError como una excepción no elevable durante la recogida de basura.

Cursor.__init__ se levantó antes de establecer los closed atributos y hstmt , que __del__ luego intentaron leer. El inicializador ahora establece ambos atributos antes de cualquier código que pueda levantarse, y __del__ protege su llamada de registro para que permanezca segura durante el apagado del intérprete.

MSSQL-Python 1.12.0

Fecha de lanzamiento: julio de 2026

Enhancements

Paquete de acompañamiento independiente mssql-python-odbc

Los binarios de controladores ODBC ahora se publican por separado como mssql-python-odbc, un paquete complementario solo de datos fijado a la versión 18.6.2. No necesitas cambiar ningún código, porque pip install mssql-python instala el paquete complementario con él. El cargador nativo prefiere el paquete complementario y recurre a los binarios agrupados dentro de la mssql-python rueda cuando no está presente.

Para obtener más información, consulte Instalación.

Correcciones de errores

cursor.bulkcopy() Ahora usa el tiempo de espera de conexión de la conexión principal

bulkcopy() Ahora utiliza el tiempo de espera de conexión de su conexión padre, que configuras con connect(..., timeout=<seconds>). Antes, la conexión separada que abría la copia masiva usaba un tiempo de espera de conexión de 15 segundos codificado de forma fija que no se podía sobrescribir desde Python. Una conexión principal creada con timeout=0 sigue recibiendo el valor predeterminado de 15 segundos.

Para más información, véase Copia masiva.

cursor.bulkcopy() soporta columnas de tipo CLR definidas por el usuario

cursor.bulkcopy() anteriormente fallaba Protocol Error: Unsupported TDS type for bulk copy: 0xF0 para cualquier columna de destino que usara un tipo definido por el usuario en tiempo de ejecución del lenguaje común (CLR), incluyendo los tipos de geografía, geometría y jerarquíid incorporados. El controlador ahora mapea las columnas UDT de CLR a varbinary(max) en el cable y transmite los bytes que suministras como carga útil del IBinarySerialize UDT. La solución se incluye en mssql_py_core la 0.1.7.

Para más información, consulte Copia masiva y Mapeos de tipos de datos.

MSSQL-Python 1.11.0

Fecha de lanzamiento: julio de 2026

Enhancements

Semántica mejorada del gestor de contexto

with connection: ahora se hace commit de la transacción cuando el bloque sale limpiamente, y la revierte cuando una excepción sale del bloque.

Para obtener más información, consulte Administración de transacciones.

Correcciones de errores

  • Se ha corregido un interbloqueo del GIL en el proceso de desmontaje de ODBC (conn.close() y cursor.close()) y en SQLDescribeParam para parámetros con valor None en configuraciones de túnel SSH y de reenviador en proceso.
  • Parámetros fijos BINARY y VARBINARY NULL en tablas temporales y variables de tabla. Cuando falla la resolución automática de tipos, el controlador ahora emite una advertencia de Python con indicaciones explícitas cursor.setinputsizes().
  • Corregido el fallo de import mssql_python en Apple Silicon tras una instalación limpia (regresión en 1.8.0). Las dependencias dylib de ODBC incluidas ahora se han reescrito para las arquitecturas arm64 y x86_64.
  • Se solucionó un deadlock GIL en el núcleo de Rust que congelaba las operaciones de copia masiva al autenticar con Authentication=ActiveDirectoryServicePrincipal.

MSSQL-Python 1.10.0

Fecha de lanzamiento: junio de 2026

Enhancements

Soporte de ActiveDirectoryServicePrincipal para copia masiva

cursor.bulkcopy() Ahora soporta Authentication=ActiveDirectoryServicePrincipal, así que puedes insertar en masa con credenciales de principal de servicio.

Para más información, véase Copia masiva y autenticación Microsoft Entra.

Correcciones de errores

  • Se corrigieron los datos no ASCII VARCHAR y CHAR en la ruta de obtención de Arrow.
  • Se corrigieron los tiempos de espera de conexión durante las operaciones de carga masiva.

MSSQL-Python 1.9.0

Fecha de lanzamiento: junio de 2026

Enhancements

Objetos de fila en copia masiva

cursor.bulkcopy() ahora acepta objetos obtenidos Row directamente en lugar de requerir conversión manual de tuplas.

Para más información, consulta Copia masiva y Objetos de fila.

Correcciones de errores

  • Embalaje de ruedas fijas, así que simdutf siempre está vinculado estáticamente.
  • Se corrigieron las inserciones grandes DECIMAL en executemany().
  • Se corrigió el fallback incorrecto de tipo para parámetros NULL.
  • Se corrigieron las excepciones en los procesos de serialización y deserialización.
  • Se ha corregido nextset() para que conserve los mensajes de PRINT entre distintos conjuntos de resultados.
  • Se corrigió el manejo de Row en la ruta alternativa de executemany() data-at-execution.
  • Se corrigió la comprobación de tipos del método fetch para las herramientas de análisis estático.

MSSQL-Python 1.8.0

Fecha de lanzamiento: mayo de 2026

Enhancements

Soporte de ActiveDirectoryMSI para copia masiva

cursor.bulkcopy() ahora admite Authentication=ActiveDirectoryMSI para identidades administradas por el sistema y asignadas por el usuario.

Para más información, véase Copia masiva y autenticación Microsoft Entra.

Indexación de filas mediante claves de cadena

Ahora puedes acceder a valores de fila por nombre de columna, por ejemplo row["col"], además de indexación posicional y acceso a atributos.

Para más información, véase Objetos de fila.

Actualización incluida del controlador ODBC

El controlador Microsoft ODBC para SQL Server incluido se actualizó a la versión 18.6.2.1.

Correcciones de errores

  • Se corrigieron problemas de duración del atributo de conexión diferida en la autenticación basada en tokens.
  • Se corrigió el análisis repetido de la cadena de conexión en la ruta de autenticación.
  • Anotaciones de tipo fijo executemany() para entradas de secuencia.

mssql-python 1.7.1

Fecha de lanzamiento: mayo de 2026

Enhancements

Ampliación de la cobertura de las ruedas y mejoras en el rendimiento

Esta versión incluye:

  • Llantas compatibles con RHEL 8.
  • Restauré las ruedas de Python 3.10 universal2 de macOS.
  • Mejoró el manejo del UTF-16 gracias simdutfa .
  • Camino caliente optimizado execute() .

Impacto en el rendimiento: El rendimiento de ejecución por lotes mejora gracias a las optimizaciones de rutas calientes en el execute() método.

Para obtener más información, consulte Instalación.

Correcciones de errores

  • Corrigieron fallos de autenticación para que generen mssql_python DB-API excepciones en lugar de RuntimeError.
  • Liberación extendida de GIL bloqueando la ejecución, obtención, transacción y llamadas a atributos de conexión ODBC.
  • Se corrigieron fallos executemany() al cambiar de signo los valores decimales.
  • Se ha corregido la decodificación inconsistente de CP1252 VARCHAR en distintas plataformas.
  • Se corrigieron los fallos cursor.bulkcopy() con las cadenas vacías en las columnas NVARCHAR(MAX) y VARCHAR(MAX).

Note

La versión 1.7.0 fue retirada debido a problemas de publicación. Usa la versión 1.7.1 o posterior.

MSSQL-Python 1.6.0

Fecha de lanzamiento: abril de 2026

Enhancements

Sanitización de cadenas de conexión basada en analizador

La sanitización de cadenas de conexión ahora utiliza un analizador en lugar de expresiones regulares, por lo que las cadenas de conexión que contienen caracteres especiales en campos de contraseña y valores con llaves se analizan correctamente.

Para obtener más información, consulte Cadenas de conexión.

Correcciones de errores

  • Se solucionó la liberación de GIL al bloquear las operaciones de conexión y desconexión ODBC.
  • Se corrigieron los cuelgues de setinputsizes() con las sugerencias SQL_DECIMAL y SQL_NUMERIC.
  • Se corrigió el comportamiento incorrecto fetchone() de los métodos del catálogo ODBC.
  • Se corrigen errores de estado inválido del cursor cuando reset_cursor=False se usa.
  • Se corrigieron las anotaciones de tipo executemany() para secuencias de parámetros basadas en mapeos.
  • Se añadió una protección de recorrido de ruta para setup_logging(log_file_path=...).

MSSQL-Python 1.5.0

Fecha de lanzamiento: abril de 2026

Características nuevas

Soporte de búsqueda de Apache Arrow

Tres nuevos métodos de cursor proporcionan una recuperación de datos columnares de alto rendimiento a través de la Interfaz de Datos Arrow C:

  • cursor.arrow() devuelve pyarrow.Table completo.
  • cursor.arrow_batch() devuelve un solo pyarrow.RecordBatch.
  • cursor.arrow_reader() devuelve un pyarrow.RecordBatchReader para transmisión en flujo.

Estos métodos no crean un objeto Python para cada valor. Para la documentación completa, véase integración con Apache Arrow.

Soporte para el tipo sql_variant

El controlador ahora detecta columnas sql_variant al recuperar los datos, resuelve su tipo base real y devuelve valores de Python correctamente tipados en lugar de bytes sin procesar.

Note

sql_variant Las columnas utilizan una ruta de obtención en streaming, que puede tener un pequeño impacto en el rendimiento en comparación con las columnas de tipo fijo.

Para obtener más información, consulte Asignaciones de tipos de datos.

Soporte nativo UUID

Una nueva native_uuid configuración controla si UNIQUEIDENTIFIER las columnas se devuelven como uuid.UUID objetos (por defecto) o como cadenas mayúsculas compatibles con pyodbc. Configúralo a nivel de módulo o por conexión.

Para más información, véase Configuración de módulos.

Exportación pública de la clase Row

La Row clase ahora se exporta al nivel superior para las anotaciones de tipos.

Para más información, véase Objetos de fila.

Correcciones de errores

  • Se corrigió la detección de falsos positivos ? dentro de identificadores entre corchetes, literales de cadena y comentarios.
  • Se corrigió la asociación de parámetros NULL para las columnas VARBINARY (ya no genera errores de conversión implícita).
  • Se corrigió un problema por el que los valores datetime.time perdían microsegundos en conversiones de ida y vuelta en columnas de TIME(1) a TIME(7).
  • Se ha corregido la ruta de obtención de Arrow para incluir correctamente segundos fraccionarios en las columnas TIME.
  • Copia masiva corregida con métodos de autenticación Microsoft Entra ID (los campos de credenciales obsoletos ya no causan errores de validación).
  • Caché instancias de credenciales de identidad de Azure a nivel de módulo para mejorar el rendimiento de autenticación.

MSSQL-Python 1.4.0

Fecha de lanzamiento: febrero de 2026

Características nuevas

Soporte para copias masivas

La carga masiva de datos de alto rendimiento ahora está disponible a través de cursor.bulkcopy(). El método acepta opciones para batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lock, keep_nulls, fire_triggers, , y use_internal_transaction.

Para más información, véase Copia masiva.

Improvements

  • Optimizaciones de rendimiento para conjuntos de resultados grandes.
  • Menor uso de memoria durante operaciones por lotes.
  • Mensajes de error mejorados para errores en la copia masiva.

MSSQL-Python 1.3.0

Fecha de lanzamiento: enero de 2026

Características nuevas

Clase de escenarios

Configura el comportamiento a nivel de módulo a través de la nueva Settings clase, que incluye la lowercase configuración para nombres de columnas en cursor.description.

Para más información, véase Configuración de módulos.

Improvements

  • Mejor gestión del tiempo de espera de conexión durante el conmutamiento por error de Azure SQL.
  • Compatibilidad mejorada con Python 3.13.

MSSQL-Python 1.2.0

Fecha de lanzamiento: enero de 2026

Características nuevas

Métodos de descubrimiento de esquemas

Nuevos métodos de cursor exploran metadatos de bases de datos: tables(), columns(), primaryKeys(), foreignKeys(), procedures(), statistics(), , y getTypeInfo().

Para más información, véase Descubrimiento de esquemas.

Improvements

  • Caché mejorada de metadatos para consultas repetidas de esquemas.
  • Mejor gestión de las columnas calculadas en los resultados de columns().

mssql-python 1.1.0

Fecha de lanzamiento: diciembre de 2025

Características nuevas

Convertidores de salida personalizados

Registrar funciones personalizadas para transformar los valores de columna durante la obtención, con add_output_converter(), get_output_converter(), remove_output_converter(), y clear_output_converters().

Para más información, véase Convertidores de tipo personalizado.

Improvements

  • Mejores mensajes de error para fallos de conversión de tipos.
  • Soporte para funciones de convertidor que devuelven None.

MSSQL-Python 1.0.0

Fecha de lanzamiento: noviembre de 2025

Lanzamiento inicial de disponibilidad general

La primera versión de disponibilidad general de mssql-python, el controlador nativo de Python de Microsoft para SQL Server.

Para más información, véase el controlador mssql-python.

Características principales

  • Arquitectura DDBC: Conectividad directa con bases de datos sin necesidad de instalación de controladores ODBC.
  • Cumplimiento de DB-API 2.0: Interfaz estándar de Python para bases de datos.
  • Agrupación de conexiones: Gestión integrada de la agrupación de conexiones.
  • Autenticación Microsoft Entra: Soporte completo para autenticación basada en identidad en Azure.
  • Cifrado TLS: Conexiones seguras con validación de certificados.

Características de conexión

  • 21 palabras clave de cadena de conexión.
  • 9 modos de autenticación (SQL, Windows y 7 métodos Microsoft Entra ID).
  • Control de confirmación automática.
  • Métodos de ejecución: execute(), executemany(), y batch_execute().
  • Atributos de conexión a través de set_attr() y getinfo().
  • Soporte para gestores de contexto.

Características del cursor

  • Métodos estándar de búsqueda: fetchone(), fetchmany(), fetchall().
  • Métodos extendidos: fetchval(), skip().
  • Métodos de ejecución: execute() y executemany().
  • Objetos de fila con acceso por atributos y por índice.
  • Navegación por conjuntos de resultados múltiples con nextset().

Compatibilidad con tipos de datos

  • Todos los tipos nativos de SQL Server.
  • Correspondencia de tipos entre Python y SQL.
  • Constantes de tipo SQL para tipado explícito (por ejemplo, mssql_python.SQL_DECIMAL).
  • Manejo de NULL como en Python None.

Compatibilidad con transacciones

  • Confirmación y reversión manuales.
  • Modo de confirmación automática.
  • Control de nivel de aislamiento.
  • Detección y manejo de bloqueos.

Modos de autenticación

Mode Descripción
Autenticación de SQL Server Nombre de usuario y contraseña
autenticación de Windows Trusted_Connection
ActiveDirectoryDefault DefaultAzureCredential
ActiveDirectoryInteractive Inicio de sesión basado en navegador
ActiveDirectoryDeviceCode Flujo de código de dispositivo
ActiveDirectoryPassword Nombre de usuario y contraseña de Microsoft Entra (obsoleto; usa ROPC)
ActiveDirectoryMSI Identidad administrada
ActiveDirectoryServicePrincipal Entidad principal de servicio
ActiveDirectoryIntegrated Windows Kerberos

Upgrade

De pyodbc

Para una guía detallada sobre migración, véase Migrar desde pyodbc.

Diferencias clave:

  • Se admiten tanto ? (qmark) como %(name)s (pyformat) como estilos de parámetros. Tus consultas existentes ? funcionan sin cambios.
  • No existe el método callproc(). Utiliza en su lugar las instrucciones EXECUTE.
  • Agrupación de conexiones integrada.
  • No requiere controladores ODBC externos.

De pymssql

Para una guía detallada sobre migración, véase Migrar desde pymssql.

Diferencias clave:

  • Reemplazar %s y %d los marcadores de parámetros por ? o %(name)s.
  • Usa una cadena de conexión en lugar de argumentos posicionales.
  • No dependía de FreeTDS.
  • Múltiples cursores concurrentes por conexión.
  • Los objetos de fila con acceso a atributos reemplazan as_dict=Truea .

Entre versiones de mssql-python

Actualiza el controlador para obtener nuevas funciones y soluciones.

pip install --upgrade mssql-python

Consulta las notas de lanzamiento para ver si hay cambios repentinos antes de actualizar los sistemas de producción.

Plan de desarrollo

Para próximas funciones y la hoja de ruta de desarrollo, consulta el repositorio de GitHub.