Novidades no mssql-python

Cada versão do driver mssql-python introduz novas funcionalidades, melhorias de desempenho e correções de bugs. As secções seguintes detalham todas as versões.

mssql-python 1.11.0

Data de lançamento: julho de 2026

Enhancements

Semântica melhorada do gestor de contexto

with connection: agora confirma corretamente as transações ao terminar sem erros e anula-as em caso de exceção, tornando-o mais idiomático em Python e previsível.

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

Correções de erros

  • Corrigido um interbloqueio do GIL no processo de encerramento do ODBC (conn.close() e cursor.close()) e em SQLDescribeParam para parâmetros com valor None em configurações com túnel SSH e com encaminhador no processo.
  • Parâmetros fixos BINARY e VARBINARY NULL em tabelas temporárias e variáveis de tabela. Quando a resolução automática de tipos falha, o driver emite agora um aviso Python com orientação explícitacursor.setinputsizes().
  • Corrigida a falha de import mssql_python em Apple Silicon numa instalação limpa (regressão introduzida na versão 1.8.0). As dependências ODBC dylib incluídas foram agora reescritas para as arquiteturas arm64 e x86_64.
  • Corrigido um deadlock GIL no núcleo Rust que congelava as operações de cópia em massa ao autenticar com Authentication=ActiveDirectoryServicePrincipal.

mssql-python 1.10.0

Data de lançamento: junho de 2026

Enhancements

Suporte ActiveDirectoryServicePrincipal para cópia em massa

cursor.bulkcopy() suporta agora Authentication=ActiveDirectoryServicePrincipal, permitindo inserções em lote utilizando credenciais do principal de serviço.

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")

Correções de erros

  • Corrigidos os dados não ASCII VARCHAR e CHAR no caminho de obtenção do Arrow.
  • Corrigidos os tempos limite de ligação durante operações de carregamento em massa.

MSSQL-Python 1.9.0

Data de lançamento: junho de 2026

Enhancements

Objetos de linha na cópia em massa

cursor.bulkcopy() passa agora a aceitar diretamente objetos obtidos Row em vez de exigir a conversão manual de tuplos.

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")

Correções de erros

  • Embalagem de rodas fixas, por isso simdutf está sempre ligada estaticamente.
  • Fixei inserções grandes DECIMAL em executemany().
  • Corrigida a alternativa incorreta do tipo para parâmetros NULL.
  • Corrigida a exceção nas operações de pickle e unpickle.
  • Foi corrigido nextset() para que preservasse as mensagens PRINT entre diferentes conjuntos de resultados.
  • Manipulação corrigida Row no executemany() caminho de queda de dados na execução.
  • Corrigida a verificação de tipos do método fetch para ferramentas de análise estática.

mssql-python 1.8.0

Data de lançamento: maio de 2026

Enhancements

Suporte ActiveDirectoryMSI para cópia em massa

cursor.bulkcopy() suporta agora Authentication=ActiveDirectoryMSI para identidades geridas atribuídas pelo sistema e atribuídas pelo utilizador.

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")

Indexação de linha por chave de tipo string

Agora pode aceder aos valores das linhas pelo nome da coluna, por exemplo row["col"], além da indexação posicional e do acesso 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

Atualização do driver ODBC integrado

O driver Microsoft ODBC para SQL Server incluído foi atualizado para a versão 18.6.2.1.

Correções de erros

  • Foram corrigidos problemas de tempo de vida diferido do atributo connect na autenticação baseada em tokens.
  • Corrigi a análise repetida de cadeia de ligação no caminho de autenticação.
  • Anotações de tipo fixo executemany() para entradas de sequência.

mssql-python 1.7.1

Data de lançamento: maio de 2026

Enhancements

Cobertura expandida das rodas e melhorias de desempenho

Esta versão adiciona wheels compatíveis com o RHEL 8, restaura as wheels do macOS para Python 3.10 universal2, melhora o tratamento de UTF-16 através de simdutf e otimiza o caminho crítico de execute().

Impacto no desempenho: A taxa de transferência da execução em lote melhora em ~15% em cargas de trabalho típicas devido a otimizações no caminho crítico do método execute().

Correções de erros

  • Foram corrigidas falhas de início de sessão para que gerem exceções da DB-API mssql_python em vez de RuntimeError.
  • Libertação estendida de GIL através do bloqueio de execução, busca, transação e chamadas de atributos de ligação ODBC.
  • Falhas corrigidas executemany() quando os valores decimais mudam de sinal.
  • Corrigi a decodificação inconsistente do CP1252 VARCHAR entre plataformas.
  • Corrigidas as falhas de cursor.bulkcopy() para strings vazias nas colunas NVARCHAR(MAX) e VARCHAR(MAX).

Note

A versão 1.7.0 foi retirada devido a problemas de publicação. Use a versão 1.7.1 ou posterior.

MSSQL-Python 1.6.0

Data de lançamento: abril de 2026

Enhancements

Sanitização de cadeia de ligação baseada em analisador

Esta melhoria garante o processamento correto de caracteres especiais nos campos de palavra-passe e nos valores entre chavetas.

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"
)

A sanitização da cadeia de ligação passou de uma lógica baseada em expressões regulares para um processamento baseado em analisador sintático, para garantir o tratamento correto da sintaxe das cadeias de ligação ODBC.

Correções de erros

  • Corrigi a libertação do GIL durante o bloqueio das operações de ligação e desconexão ODBC.
  • Corrigi setinputsizes() crashes com SQL_DECIMAL e SQL_NUMERIC dicas.
  • Corrigido o comportamento incorreto de fetchone() nos métodos de catálogo ODBC.
  • Corrigidos erros de estado inválido do cursor quando reset_cursor=False é usado.
  • Dicas de tipo fixo executemany() para sequências de parâmetros baseadas em mapeamento.
  • Foi adicionado um guarda de percurso de caminho para setup_logging(log_file_path=...).

MSSQL-Python 1.5.0

Data de lançamento: abril de 2026

Novas funcionalidades

Suporte de busca do Apache Arrow

Três novos métodos de cursor proporcionam recuperação de dados colunares de alto desempenho através da Interface de Dados Arrow C:

  • cursor.arrow() retorna um pyarrow.Table completo.
  • cursor.arrow_batch() devolve um único pyarrow.RecordBatch.
  • cursor.arrow_reader() devolve um pyarrow.RecordBatchReader para transmissão em fluxo.

A implementação ignora a criação de objetos em Python no caminho quente para melhorar o desempenho. Para documentação completa, veja integração com o Apache Arrow.

suporte para o tipo sql_variant

O driver agora deteta sql_variant colunas em tempo de busca, resolve o seu tipo base subjacente e devolve valores Python corretamente digitados em vez de bytes brutos.

Note

sql_variant As colunas usam um caminho de busca em streaming, que pode ter um ligeiro impacto no desempenho em comparação com colunas do tipo fixo.

Suporte nativo à UUID

Uma nova definição native_uuid controla se as colunas UNIQUEIDENTIFIER são devolvidas como objetos uuid.UUID (por defeito) ou como cadeias de caracteres em maiúsculas compatíveis com pyodbc. Configure-o ao nível do módulo ou por ligação:

# 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 mais informações, consulte Configuração do módulo.

Classe de linha de exportação pública

A Row classe é agora exportada ao nível superior para anotações de tipo:

from mssql_python import Row

Correções de erros

  • Corrigiu a deteção de falsos positivos ? dentro de identificadores colcheados, literais de string e comentários.
  • Corrigida a associação de parâmetros NULL em colunas VARBINARY (já não gera erros de conversão implícita).
  • Corrigido um problema em que valores datetime.time de ponto fixo perdiam os microssegundos em operações de ida e volta para colunas de TIME(1) a TIME(7).
  • Corrigido o caminho de obtenção do Arrow para incluir corretamente segundos fracionais nas colunas TIME.
  • Cópia em massa corrigida com métodos de autenticação do Microsoft Entra ID (campos de credenciais obsoletos já não causam erros de validação).
  • Instâncias de credenciais Azure Identity armazenadas em cache ao nível do módulo para melhorar o desempenho da autenticação.

mssql-python 1.4.0

Data de lançamento: março de 2025

Novas funcionalidades

Suporte para cópia em massa

O carregamento de dados em massa de alto desempenho está agora disponível atravé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")

O método aceita opções para batch_size, timeout, column_mappings, keep_identity, check_constraints, table_lock, keep_nulls, fire_triggers, e use_internal_transaction.

Consulte Cópia em lote para obter a documentação completa.

Improvements

  • Otimizações de desempenho para grandes conjuntos de resultados.
  • Redução do uso de memória durante operações em lote.
  • Mensagens de erro melhoradas para falhas de cópia em massa.

mssql-python 1.3.0

Data de lançamento: janeiro de 2025

Novas funcionalidades

Classe de definições

Configure o comportamento em todo o módulo através da nova Settings classe:

import mssql_python

settings = mssql_python.get_settings()
settings.lowercase = True       # Lowercase column names in cursor.description

Consulte a configuração do módulo para mais detalhes.

Improvements

  • Melhor gestão do timeout da ligação durante o failover do SQL do Azure.
  • Compatibilidade melhorada com Python 3.13.

mssql-python 1.2.0

Data de lançamento: novembro de 2024

Novas funcionalidades

Métodos de descoberta de esquemas

Novos métodos de cursor para exploração de metadados de bases de dados:

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()

Consulte Descoberta de esquemas para documentação completa.

Improvements

  • Cache de metadados melhorado para consultas repetidas de esquema.
  • Melhor gestão das colunas computadas nos columns() resultados.

mssql-python 1.1.0

Data de lançamento: setembro de 2024

Novas funcionalidades

Conversores de saída personalizados

Registar funções personalizadas para transformar os valores das colunas durante a obtenção:

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 gestão:

  • add_output_converter(sql_type, converter_func)
  • get_output_converter(sql_type)
  • remove_output_converter(sql_type)
  • clear_output_converters()

Para documentação completa, veja Conversores de tipo personalizado.

Improvements

  • Mensagens de erro melhores para falhas de conversão de tipos.
  • Suporte para funções de conversor que retornam None.

mssql-python 1.0.0

Data de lançamento: julho de 2024

Lançamento inicial da disponibilidade geral

A primeira versão de disponibilidade geral do mssql-python, o driver nativo de Python da Microsoft para SQL Server.

Principais características

  • Arquitetura DDBC: Conectividade direta com base de dados sem necessidade de instalação de drivers ODBC.
  • Conformidade com a DB-API 2.0: Interface padrão de base de dados para Python.
  • Agrupamento de ligações: Gestão incorporada do agrupamento de ligações.
  • Autenticação Microsoft Entra: Suporte total para autenticação baseada em identidade no Azure.
  • Encriptação TLS: Ligações seguras com validação de certificados.

Características de ligação

  • 21 palavras-chave da cadeia de ligação.
  • 9 modos de autenticação (SQL, Windows e 7 métodos Microsoft Entra ID).
  • Controlo de autocommit.
  • Métodos de execução: execute(), executemany(), e batch_execute().
  • Atributos de ligação através de set_attr() e getinfo().
  • Suporte ao gestor de contexto.

Características do cursor

  • Métodos padrão de busca: fetchone(), fetchmany(), fetchall().
  • Métodos estendidos: fetchval(), skip().
  • Métodos de execução: execute() e executemany().
  • Objetos de linha com acesso a atributos e índice.
  • Navegação por múltiplos conjuntos de resultados com nextset().

Suporte a tipos de dados

  • Todos os tipos nativos do SQL Server.
  • Mapeamento de tipos Python↔SQL.
  • Constantes de tipo SQL para tipagem explícita (por exemplo, mssql_python.SQL_DECIMAL).
  • Tratamento de NULL em Python None.

Suporte a transações

  • Confirmação e reversão manuais.
  • Modo de confirmação automática.
  • Controlo do nível de isolamento.
  • Deteção e manuseamento de bloqueios.

Modos de autenticação

Mode Descrição
Autenticação do SQL Server Nome de utilizador e palavra-passe
Windows authentication Trusted_Connection
ActiveDirectoryDefault DefaultAzureCredential
ActiveDirectoryInteractive Início de sessão baseado em navegador
ActiveDirectoryDeviceCode Fluxo de código do dispositivo
ActiveDirectoryPassword Nome de utilizador e palavra-passe do Microsoft Entra (descontinuado; usa ROPC)
ActiveDirectoryMSI Identidade gerenciada
ActiveDirectoryServicePrincipal Serviço principal
Integrado no Active Directory Windows Kerberos

Upgrade

De pyodbc

Para orientações detalhadas sobre migração, veja Migrar a partir de pyodbc.

Principais diferenças:

  • São suportados os estilos de parâmetros ? (qmark) e %(name)s (pyformat). As suas consultas existentes ? funcionam sem alterações.
  • Nenhum método callproc(). Utilize instruções EXECUTE em vez disso.
  • Agrupamento de ligações integrado.
  • Sem dependência de drivers ODBC externos.

De pymssql

Para orientações detalhadas sobre migração, veja Migrar a partir do pymssql.

Principais diferenças:

  • Substitua os marcadores de parâmetros %s e %d por ? ou %(name)s.
  • Use uma cadeia de ligação em vez de argumentos posicionais.
  • Sem dependência do FreeTDS.
  • Vários cursores concorrentes por ligação.
  • Os objetos de linha com acesso a atributos substituem as_dict=True.

Entre versões mssql-python

Atualize o driver para obter novas funcionalidades e correções.

pip install --upgrade mssql-python

Verifique as notas de lançamento para ver se há alterações repentinas antes de atualizar os sistemas de produção.

Roteiro

Para funcionalidades futuras e o roteiro de desenvolvimento, consulte o repositório GitHub.