Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cada versión del controlador mssql-python introduce nuevas funcionalidades, mejoras de rendimiento y correcciones de errores. Las siguientes secciones detallan cada versión.
MSSQL-Python 1.11.0
Fecha de lanzamiento: julio de 2026
Enhancements
Semántica mejorada del gestor de contexto
with connection: ahora confirma correctamente las transacciones al finalizar correctamente y las revierte si se produce una excepción, lo que lo hace más idiomático de Python y predecible.
import mssql_python
# On clean exit, transaction commits
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Alice')")
# Automatically committed on exit
# On exception, transaction rolls back
try:
with mssql_python.connect(connection_string) as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO MyTable (Name) VALUES ('Bob')")
raise ValueError("Oops!")
except ValueError:
pass
# Changes rolled back on exit
Correcciones de errores
- Se ha corregido un interbloqueo del GIL en el proceso de desmontaje de ODBC (
conn.close()ycursor.close()) y enSQLDescribeParampara parámetros con valorNoneen configuraciones de túnel SSH y de reenviador en proceso. - Parámetros fijos
BINARYyVARBINARYNULL 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ícitascursor.setinputsizes(). - Corregido el fallo de
import mssql_pythonen 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 arquitecturasarm64yx86_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 admite Authentication=ActiveDirectoryServicePrincipal, lo que permite inserciones masivas mediante credenciales de entidad de servicio.
import mssql_python
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryServicePrincipal;"
"UID=<application-client-id>;"
"PWD=<client-secret>;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##SpDemo (ID INT, Value FLOAT)")
conn.commit()
result = cursor.bulkcopy("##SpDemo", [(1, 1.5), (2, 2.5)])
print(f"Copied {result['rows_copied']} rows")
Correcciones de errores
- Se corrigieron los datos no ASCII
VARCHARyCHARen 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.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
# Fetch rows from source table
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product")
rows = cursor.fetchall()
# Pass fetched Row objects directly to bulkcopy
cursor.execute("CREATE TABLE ##RowBulkDemo (ProductID INT, Name NVARCHAR(50), ListPrice MONEY)")
conn.commit()
result = cursor.bulkcopy("##RowBulkDemo", rows)
print(f"Copied {result['rows_copied']} rows")
Correcciones de errores
- Embalaje de ruedas fijas, así que
simdutfsiempre está vinculado estáticamente. - Se corrigieron las inserciones grandes
DECIMALenexecutemany(). - 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 dePRINTentre distintos conjuntos de resultados. - Se corrigió el manejo de
Rowen la ruta alternativa deexecutemany()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.
import mssql_python
# System-assigned managed identity
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"Authentication=ActiveDirectoryMSI;"
"Encrypt=yes"
)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##MsiDemo (ID INT, Name NVARCHAR(50))")
conn.commit()
result = cursor.bulkcopy("##MsiDemo", [(1, "Alice"), (2, "Bob")])
print(f"Copied {result['rows_copied']} rows")
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.
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("SELECT ProductID, Name, ListPrice FROM Production.Product WHERE ProductID = 1")
row = cursor.fetchone()
# Access by column name (new in 1.8.0)
print(row["ProductID"]) # Access by key
print(row["Name"])
# Still supports positional indexing
print(row[0]) # Positional access
# And attribute access
print(row.Name) # Attribute access
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 añade ruedas compatibles con RHEL 8, restaura las ruedas Python 3.10 universal2 de macOS, mejora el manejo del UTF-16 mediante simdutf, y optimiza el execute() camino caliente.
Impacto en el rendimiento: El rendimiento de ejecución por lotes mejora en ~15% respecto a las cargas de trabajo típicas gracias a las optimizaciones de rutas calientes en el execute() método.
Correcciones de errores
- Se corrigieron los fallos de inicio de sesión para que generaran excepciones de DB-API
mssql_pythonen lugar deRuntimeError. - 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
VARCHARen distintas plataformas. - Se corrigieron los fallos
cursor.bulkcopy()con las cadenas vacías en las columnasNVARCHAR(MAX)yVARCHAR(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
Esta mejora garantiza el procesamiento correcto de caracteres especiales en los campos de contraseña y en los valores entre llaves.
import mssql_python
# Complex passwords with special characters now parse correctly
conn = mssql_python.connect(
"Server=<server>.database.windows.net;"
"Database=<database>;"
"UID=user@contoso;"
"PWD={p@ssw0rd;with{braces}};" # Braced values now handled correctly
"Encrypt=yes"
)
La sanitización de la cadena de conexión pasó de una lógica basada en expresiones regulares a un procesamiento basado en analizador sintáctico para gestionar correctamente la sintaxis de las cadenas de conexión ODBC.
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 sugerenciasSQL_DECIMALySQL_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=Falsese 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()devuelvepyarrow.Tablecompleto. -
cursor.arrow_batch()devuelve un solopyarrow.RecordBatch. -
cursor.arrow_reader()devuelve unpyarrow.RecordBatchReaderpara transmisión en flujo.
La implementación evita la creación de objetos en Python en la ruta caliente para mejorar el rendimiento. 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.
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:
# Module-level default
settings = mssql_python.get_settings()
settings.native_uuid = True # default
# Per-connection override
conn = mssql_python.connect(connection_string, native_uuid=False)
Para más información, véase Configuración de módulos.
Exportación pública de la clase Row
La clase Row ahora se exporta en el nivel superior para anotaciones de tipo:
from mssql_python import Row
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.timeperdían microsegundos en conversiones de ida y vuelta en columnas deTIME(1)aTIME(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: marzo de 2025
Características nuevas
Soporte para copias masivas
La carga masiva de datos de alto rendimiento ahora está disponible a través de:cursor.bulkcopy()
import mssql_python
conn = mssql_python.connect(connection_string)
cursor = conn.cursor()
cursor.execute("CREATE TABLE ##BulkDemo (ID INT, Name NVARCHAR(50), Price DECIMAL(10,2))")
conn.commit()
data = [
(1, "Item 1", 10.50),
(2, "Item 2", 20.75),
# ... potentially millions of rows
]
result = cursor.bulkcopy("##BulkDemo", data)
print(f"Copied {result['rows_copied']} rows")
El método acepta opciones para batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lock, keep_nulls, fire_triggers, , y use_internal_transaction.
Consulte copia en bloque para obtener la documentación completa.
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 2025
Características nuevas
Clase de escenarios
Configura el comportamiento a nivel de módulo a través de la nueva Settings clase:
import mssql_python
settings = mssql_python.get_settings()
settings.lowercase = True # Lowercase column names in cursor.description
Consulta la configuración del módulo para más detalles.
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: noviembre de 2024
Características nuevas
Métodos de descubrimiento de esquemas
Nuevos métodos de cursor para la exploración de metadatos de bases de datos:
cursor = conn.cursor()
# List all tables
cursor.tables(schema="dbo")
# Get column information
cursor.columns(table="Product", schema="Production")
# Get primary keys
cursor.primaryKeys(table="Product", schema="Production")
# Get foreign key relationships
cursor.foreignKeys(table="SalesOrderDetail", schema="Sales")
# Get stored procedures
cursor.procedures(schema="dbo")
# Get index statistics
cursor.statistics(table="Product", schema="Production")
# Get type information
cursor.getTypeInfo()
Consulta Descubrimiento de esquemas para la documentación completa.
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: septiembre de 2024
Características nuevas
Convertidores de salida personalizados
Registrar funciones personalizadas para transformar los valores de las columnas durante la obtención:
import mssql_python
from decimal import Decimal
conn = mssql_python.connect(connection_string)
# Convert decimals to float (converter receives Decimal)
def decimal_to_float(value):
if value is None:
return None
return float(value) # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, decimal_to_float)
# Custom money formatting
def format_money(value):
if value is None:
return "$0.00"
return f"${float(value):,.2f}" # value is already a Decimal object
conn.add_output_converter(mssql_python.SQL_DECIMAL, format_money)
Métodos de manejo:
add_output_converter(sql_type, converter_func)get_output_converter(sql_type)remove_output_converter(sql_type)clear_output_converters()
Para la documentación completa, 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: julio de 2024
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.
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(), ybatch_execute(). - Atributos de conexión a través de
set_attr()ygetinfo(). - 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()yexecutemany(). - 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(). UtilizaEXECUTEsentencias en su lugar. - 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
%sy%dlos 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.