Novidades no mssql-python

Este artigo lista o que mudou em cada versão do driver mssql-python, a mais recente em primeiro lugar. Cada seção cobre novos recursos, mudanças de comportamento e correções de bugs para uma versão.

Para as versões que a Microsoft atualmente suporta, veja Ciclo de vida de Suporte.

mssql-python 1.14.0

Data de lançamento: agosto de 2026

Enhancements

Detecção e vinculação de parâmetros executadas em código nativo

A detecção e a vinculação de tipos de parâmetros agora são executadas em um único pipeline nativo, em vez de chamadas em Python por parâmetro. Essa mudança corrige um gargalo significativo de desempenho, com ganhos ainda maiores no throughput de ponta a ponta em operações de maior porte, como inserções em massa. Não é necessária mudança na inscrição.

Correções de erros

O timeout argumento para connect() definir o tempo limite da consulta em vez do tempo limite da autenticação

O timeout argumento agora define SQL_ATTR_LOGIN_TIMEOUT e limita a tentativa de autenticação, que é o que o nome do argumento e a documentação descrevem. Nas versões anteriores, ele passou a ser o tempo limite de consulta por instrução, então connect(timeout=30) não limitava por quanto tempo uma tentativa de conexão poderia durar e interrompia as consultas após 30 segundos. O tempo limite da consulta para cada instrução permanece disponível na propriedade Connection.timeout.

Importante

Se você passou timeout para que connect() abortasse consultas demoradas, esse comportamento não ocorre mais. Defina Connection.timeout em vez disso. O mesmo se aplica se você confiou em connect(timeout=) para aumentar o tempo limite de conexão que bulkcopy() usa para sua conexão interna: defina Connection.timeout antes de criar o cursor.

Para mais informações, consulte Tempo limite da conexão.

bulkcopy() Rejeitado timeout=0

Um timeout de 0 gerou um erro de validação, embora 0 signifique que não há tempo limite na API subjacente de cópia em massa. O método agora aceita 0 e desativa o tempo limite da operação. Valores negativos, não inteiros e booleanos ainda são rejeitados.

Para mais informações, veja Cópia em massa.

A limpeza substituiu a exceção original de busca do Arrow

Quando uma busca a partir de um leitor Arrow falhava, a rotina de limpeza do driver gerava um segundo erro que substituía o original, de modo que quem chamou via uma falha de limpeza em vez do motivo da falha na busca. A limpeza passa a verificar primeiro o estado do cursor e preserva a exceção original.

executemany() Erros de conversão decimais incluíam valores de parâmetros

Uma falha na conversão decimal em executemany() expôs o valor problemático por meio da exceção encadeada, o que poderia colocar dados do cliente em logs de aplicativos e sistemas de monitoramento. O erro agora reporta apenas o índice de linha, o índice da coluna e o tipo de valor.

Para obter mais informações, veja Tratamento de erro.

Tipos do Arrow View rejeitados na cópia em massa

bulkcopy_arrow() não podia consumir arrays Arrow View de comprimento variável, então as colunas do Polars string_view tiveram primeiro que ser convertidas com DataFrame.to_arrow(). Os valores da String View e NULLs agora passam diretamente pela Interface de Dados Arrow C.

Para mais informações, veja integração com Polars.

O carregamento de extensões do Windows usava a arquitetura da CPU do host

No Windows, o driver selecionava sua extensão nativa com base na CPU do host, em vez do interpretador em execução, então o Python x64 em um host ARM64 era carregado por um caminho alternativo e emitia mensagens no stdout. O carregador agora deriva a arquitetura do interpretador e relata as alternativas como avisos.

mssql-python 1.13.0

Data de lançamento: agosto de 2026

Enhancements

Os binários do driver ODBC são distribuídos apenas em mssql-python-odbc

A versão 1.13.0 remove o fallback libs/ do wheel mssql-python e declara mssql-python-odbc==18.6.2.1 em install_requires. O comando pip install mssql-python ainda produz um driver funcionando. Instale mssql-python-odbc explicitamente ao instalar com --no-deps, ou de um índice privado que não o espelhe.

Para obter mais informações, confira Instalação.

Cópia em lote de fontes do Apache Arrow

O novo cursor.bulkcopy_arrow() método carrega dados que já estão no formato Apache Arrow, sem converter cada linha em objetos Python primeiro. Passar uma origem Arrow para bulkcopy() agora gera TypeError.

Para mais informações, veja integração com Apache Arrow e cópia em massa.

token_provider parâmetro para credenciais do Microsoft Entra

A connect() função e a Connection classe aceitam um token_provider argumento, então você pode passar um objeto de credencial, como DefaultAzureCredential em vez de nomear um modo de autenticação na cadeia de conexão. O argumento é incompatível com a palavra-chave Authentication e com tokens passados por attrs_before, e suporta apenas o escopo da nuvem comercial do Azure.

Para obter mais informações, consulte Autenticação do Microsoft Entra.

Pool de conexões com reconhecimento de identidade

O pool de conexões agora separa as conexões de acordo com a identidade Microsoft Entra. Em versões anteriores, o pool era indexado apenas pela string de conexão, de modo que podia fornecer a uma solicitação feita por um usuário uma conexão autenticada em nome de outro. O driver também adquire um token somente quando uma solicitação de conexão não é atendida pelo pool e renova uma conexão do pool quando seu token está a menos de 5 minutos do vencimento.

Para mais informações, veja Agrupamento de conexões.

Correções de erros

executemany() inseriu zero linhas quando valores NULL apareceram após a primeira linha

Uma executemany() chamada que misturava valores numéricos não NULL e NULL não inseria nenhuma linha e não gerava nenhuma exceção quando o primeiro NULL aparecia após a primeira linha. Esse comportamento afetava parâmetros tinyint, smallint, int e float. O driver agora inicializa indicadores ODBC para cada parâmetro numérico de largura fixa antes da execução do array.

Um conversor de saída SQL_WVARCHAR transformou colunas que não eram do tipo string

Registrar um único conversor de string também convertia os valores int, decimal e date, pois o driver recorria ao conversor SQL_WVARCHAR para qualquer coluna sem seu próprio conversor. O driver agora usa esse recurso apenas quando o tipo de Python mapeado da coluna é str ou bytes.

Conversores de saída registrados por código inteiro do tipo SQL nunca foram executados

Conversores registrados com um código inteiro do tipo SQL, como SQL_DECIMAL, eram armazenados, mas nunca invocados, porque o driver despachava apenas no tipo Python em cursor.description. O driver agora envia com base primeiro no código de inteiro, depois no tipo Python e, em seguida, no fallback SQL_WVARCHAR.

Importante

Se você registrou conversores por código inteiro do tipo SQL em uma versão anterior, esses conversores começam a rodar quando você atualiza. Revise-os antes de implantar, porque os valores das colunas que antes passavam sem alterações agora são transformados.

Para mais informações, veja Conversores de tipo personalizado.

Fechar um leitor Arrow não liberou o cursor do lado do servidor

O fechamento de um leitor Arrow deixou o cursor no lado do servidor alocado e o pai Cursor em estado inconsistente, porque cursor.arrow_reader() retornou um pyarrow.RecordBatchReader bruto. O método agora retorna um wrapper cujo close() método libera o cursor do lado do servidor e redefine o estado do cursor, e o wrapper funciona como um gerenciador de contexto.

Para mais informações, veja integração com o Apache Arrow.

Um cursor parcialmente inicializado gerou AttributeError em Cursor.__del__

Um cursor cujo inicializador falhou gerou um AttributeError como uma exceção não gerável durante a coleta de lixo.

Cursor.__init__ foi acionado antes de definir os atributos closed e hstmt, que __del__ tentou então ler. O inicializador agora define ambos os atributos antes de qualquer código que possa ser levantado, e __del__ protege sua chamada de registro para que permaneça segura durante o desligamento do interpretador.

mssql-python 1.12.0

Data de lançamento: julho de 2026

Enhancements

Pacote complementar independente mssql-python-odbc

Os binários do driver ODBC agora são publicados separadamente como mssql-python-odbc, um pacote complementar somente de dados fixado na versão 18.6.2. Você não precisa mudar nenhum código, porque pip install mssql-python instala o pacote complementar com ele. O carregador nativo prefere o pacote complementar e recorre aos binários agrupados dentro da mssql-python roda quando ele não está presente.

Para obter mais informações, confira Instalação.

Correções de erros

cursor.bulkcopy() agora usa o tempo limite da conexão principal

bulkcopy() agora usa o tempo limite de conexão da conexão pai, que você define com connect(..., timeout=<seconds>). Antes, a conexão separada que o bulk copy abria usava um timeout de conexão de 15 segundos fixo no código, que você não podia substituir via Python. Uma conexão parental criada com timeout=0 ainda recebe o padrão de 15 segundos.

Para mais informações, veja Cópia em massa.

cursor.bulkcopy() suporta colunas de tipo CLR definidas pelo usuário

cursor.bulkcopy() falhava anteriormente com Protocol Error: Unsupported TDS type for bulk copy: 0xF0 para qualquer coluna de destino que usasse um tipo definido pelo usuário do Common Language Runtime (CLR), incluindo os tipos internos geography, geometry e hierarchyid. O driver agora mapeia as colunas CLR UDT para varbinary(max) no fio e transmite os bytes que você fornece como payload do IBinarySerialize UDT. A correção é lançada na mssql_py_core versão 0.1.7.

Para mais informações, veja Cópia em massa e Mapeamentos de tipos de dados.

mssql-python 1.11.0

Data de lançamento: julho de 2026

Enhancements

Semântica aprimorada do gerenciador de contexto

with connection: agora confirma a transação quando o bloco é encerrado sem erros e a reverte quando uma exceção faz com que a execução saia do bloco.

Para obter mais informações, consulte Gerenciamento de transações.

Correções de erros

  • Corrigido um deadlock do GIL na rotina 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 forwarder 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 agora emite um aviso em Python com orientação explícitacursor.setinputsizes().
  • Corrigido o problema em que import mssql_python falhava no Apple Silicon em uma instalação limpa (regressão na versão 1.8.0). As dependências ODBC dylib incluídas agora são reescritas para as arquiteturas arm64 e x86_64.
  • Corrigido um deadlock do GIL no núcleo em Rust que congelava operações de cópia em massa durante a autenticação com Authentication=ActiveDirectoryServicePrincipal.

mssql-python 1.10.0

Data de lançamento: junho de 2026

Enhancements

Suporte ao ActiveDirectoryServicePrincipal para cópia em massa

cursor.bulkcopy() agora oferece suporte a Authentication=ActiveDirectoryServicePrincipal, para que você possa fazer inserções em massa com credenciais de entidade de serviço.

Para mais informações, veja Cópia em massa e autenticação Microsoft Entra.

Correções de erros

  • Corrigidos os dados não ASCII VARCHAR e CHAR no caminho de busca do Arrow.
  • Prazos de conexão fixos durante operações de carga 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() agora aceita objetos buscados Row diretamente em vez de exigir conversão manual de tuplas.

Para mais informações, consulte cópia em massa e objetos de linha.

Correções de erros

  • Embalagem de roda fixa, então simdutf está sempre vinculada estaticamente.
  • Corrigidas grandes inserções DECIMAL em executemany().
  • Corrigido o tipo incorreto de fallback para parâmetros NULL.
  • Corrigidos os ciclos de serialização e desserialização de exceções com pickle.
  • Corrigido nextset() para que preserve mensagens PRINT entre diferentes conjuntos de resultados.
  • Corrigido tratamento Row no caminho de fallback de dados na execução executemany().
  • Corrigida a verificação de tipos de método de busca para ferramentas de análise estática.

mssql-python 1.8.0

Data de lançamento: maio de 2026

Enhancements

Suporte ao ActiveDirectoryMSI para cópia em massa

cursor.bulkcopy() agora comporta Authentication=ActiveDirectoryMSI para identidades gerenciadas atribuídas pelo sistema e pelo usuário.

Para mais informações, veja Cópia em massa e autenticação Microsoft Entra.

Indexação de linhas por chave de texto

Agora você pode acessar valores de linha pelo nome da coluna, por exemplo row["col"], além da indexação posicional e do acesso a atributos.

Para mais informações, consulte Objetos de linha.

Atualização do driver ODBC incluído

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

Correções de erros

  • Corrigidos problemas no ciclo de vida do connect-attribute adiado na autenticação baseada em tokens.
  • Corrigiu a análise repetida da cadeia de conexão no fluxo de autenticação.
  • Corridas as anotações de tipo executemany() para entradas de sequência.

MSSQL-Python 1.7.1

Data de lançamento: maio de 2026

Enhancements

Cobertura ampliada das rodas e melhorias de desempenho

Esta versão inclui:

  • Rodas compatíveis com RHEL 8.
  • Restaurei as rodas do Python 3.10 universal2 do macOS.
  • Tratamento aprimorado de UTF-16 por meio de simdutf.
  • Caminho quente otimizado execute() .

Impacto no desempenho: A taxa de execução em lote melhora devido às otimizações do caminho ativo no método execute().

Para obter mais informações, confira Instalação.

Correções de erros

  • Corrigidas falhas de autenticação para que passem a gerar exceções DB-API mssql_python em vez de RuntimeError.
  • Liberação estendida de GIL bloqueando a execução, busca, transação e chamadas de atributos de conexão ODBC.
  • Corrigidas falhas executemany() quando valores decimais mudam de sinal.
  • Corrigida a decodificação inconsistente do CP1252 VARCHAR entre plataformas.
  • Corrigidas falhas cursor.bulkcopy() para cadeias de caracteres 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 conexão baseada em analisador sintático

A higienização de strings de conexão agora usa um analisador em vez de expressões regulares, de modo que strings de conexão que contêm caracteres especiais em campos de senha e valores entre chaves sejam interpretadas corretamente.

Para obter mais informações, consulte Cadeias de conexão.

Correções de erros

  • Corrigida a liberação do GIL durante operações bloqueantes de conexão e desconexão via ODBC.
  • Corrigidas as falhas de setinputsizes() com as indicações SQL_DECIMAL e SQL_NUMERIC.
  • Corrigido o comportamento incorreto de fetchone() para métodos do catálogo ODBC.
  • Corrigido erros de estado inválido do cursor quando reset_cursor=False é usado.
  • Corrigidas as dicas de tipo de executemany() para sequências de parâmetros baseadas em mapeamento.
  • Adicionada uma proteção de travessia de caminho para setup_logging(log_file_path=...).

MSSQL-Python 1.5.0

Data de lançamento: abril de 2026

Novos recursos

Suporte de busca Apache Arrow

Três novos métodos de cursor oferecem recuperação colunar de dados de alto desempenho por meio da Interface de Dados Arrow C:

  • cursor.arrow() retorna um pyarrow.Table completo.
  • cursor.arrow_batch() retorna um único pyarrow.RecordBatch.
  • cursor.arrow_reader() exibe pyarrow.RecordBatchReader para streaming.

Esses métodos não criam um objeto Python para cada valor. Para documentação completa, veja integração com o Apache Arrow.

Suporte ao tipo sql_variant

O driver agora detecta colunas sql_variant no momento da busca, determina seu tipo base subjacente e retorna valores de Python com o tipo correto, em vez de bytes brutos.

Note

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

Para obter mais informações, consulte mapeamentos de tipo de dados.

Suporte nativo à UUID

Uma nova configuração native_uuid controla se as colunas UNIQUEIDENTIFIER são retornadas como objetos uuid.UUID (padrão) ou como cadeias de caracteres em maiúsculas compatíveis com pyodbc. Configure no nível do módulo ou para cada conexão.

Para mais informações, veja Configuração do módulo.

Exportação pública da classe Row

A classe Row agora é exportada no nível superior para anotações de tipos.

Para mais informações, consulte Objetos de linha.

Correções de erros

  • Corrigida a detecção incorreta de ? dentro de identificadores entre colchetes, literais de cadeia de caracteres e comentários.
  • Fixei a vinculação de parâmetros NULL para VARBINARY colunas (não gera mais erros implícitos de conversão).
  • Corrigida a perda de microssegundos nos valores de datetime.time durante os ciclos de ida e volta para colunas TIME(1) a TIME(7).
  • Corrigido o caminho de busca do Arrow para incluir corretamente frações de segundo para colunas TIME.
  • Corrigida a cópia em massa com métodos de autenticação do Microsoft Entra ID (campos de credenciais obsoletos não causam mais erros de validação).
  • Instâncias de credenciais Azure Identity armazenadas em cache no nível do módulo para melhorar o desempenho da autenticação.

mssql-python 1.4.0

Data de lançamento: fevereiro de 2026

Novos recursos

Suporte para cópia em massa

O carregamento de dados em massa de alto desempenho agora está disponível por meio de cursor.bulkcopy(). O método aceita opções para batch_size, timeout, column_mappings, keep_identity, check_constraintstable_lock, , keep_nulls, fire_triggers, e use_internal_transaction.

Para mais informações, veja Cópia em massa.

Improvements

  • Otimizações de desempenho para grandes conjuntos de resultados.
  • Uso reduzido de memória durante operações em lote.
  • Mensagens de erro aprimoradas para falhas de cópia em massa.

mssql-python 1.3.0

Data de lançamento: janeiro de 2026

Novos recursos

Classe de configurações

Configure o comportamento do módulo por meio da nova classe Settings, que inclui a configuração lowercase para nomes de colunas em cursor.description.

Para mais informações, veja Configuração do módulo.

Improvements

  • Melhor manejo do timeout da conexão durante o failover do SQL do Azure.
  • Compatibilidade aprimorada com Python 3.13.

MSSQL-Python 1.2.0

Data de lançamento: janeiro de 2026

Novos recursos

Métodos de descoberta de esquemas

Novos métodos de cursor exploram metadados de banco de dados: tables(), columns(), primaryKeys(), foreignKeys(), procedures(), statistics(), , e getTypeInfo().

Para mais informações, veja Descoberta de esquemas.

Improvements

  • Cache aprimorado de metadados para consultas repetidas de esquema.
  • Melhor tratamento das colunas computadas nos resultados columns().

mssql-python 1.1.0

Data de lançamento: dezembro de 2025

Novos recursos

Conversores de saída personalizados

Registre funções personalizadas para transformar os valores da coluna ao buscar, com add_output_converter(), get_output_converter(), remove_output_converter() e clear_output_converters().

Para mais informações, veja Conversores de tipo personalizado.

Improvements

  • Melhores mensagens de erro para falhas na conversão de tipo.
  • Suporte para funções de conversor que retornam None.

MSSQL-Python 1.0.0

Data de lançamento: novembro de 2025

Lançamento inicial para disponibilidade geral

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

Para mais informações, veja o driver mssql-python.

Principais recursos

  • Arquitetura DDBC: Conectividade direta com banco de dados sem exigir instalação de drivers ODBC.
  • Conformidade com a DB-API 2.0: Interface padrão de banco de dados do Python.
  • Pool de conexões: Gerenciamento integrado de pool de conexões.
  • Autenticação Microsoft Entra: Suporte completo para autenticação baseada em identidade no Azure.
  • Criptografia TLS: Conexões seguras com validação de certificados.

Recursos de conexão

  • 21 palavras-chave de cadeia de conexão.
  • 9 modos de autenticação (SQL, Windows e 7 métodos Microsoft Entra ID).
  • Controle de confirmação automática.
  • Métodos de execução: execute(), executemany(), e batch_execute().
  • Atributos de conexão através de set_attr() e getinfo().
  • Suporte ao gerenciador de contexto.

Recursos 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 do tipo de dados

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

Suporte à transação

  • Confirmação e reversão manuais.
  • Modo de autocommit.
  • Controle de nível de isolamento.
  • Detecção e manuseio de bloqueios.

Modos de autenticação

Modo Descrição
Autenticação do SQL Server Nome de usuário e senha
autenticação do Windows Trusted_Connection
ActiveDirectoryDefault DefaultAzureCredential
ActiveDirectoryInteractive Login baseado em navegador
ActiveDirectoryDeviceCode Fluxo de código do dispositivo
ActiveDirectoryPassword Nome de usuário e senha da Microsoft Entra (descontinuado; usa ROPC)
ActiveDirectoryMSI Identidade gerenciada
ActiveDirectoryServicePrincipal Entidade de serviço
ActiveDirectoryIntegrated Windows Kerberos

Upgrade

De pyodbc

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

Principais diferenças:

  • Tanto o estilo de parâmetro ? (qmark) quanto o estilo de parâmetro %(name)s (pyformat) são suportados. Suas consultas existentes ? funcionam sem alterações.
  • Nenhum método callproc(). Use instruções EXECUTE em vez delas.
  • Pool de conexões integrado.
  • Sem dependência de driver ODBC externo.

De pymssql

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

Principais diferenças:

  • Substitua os marcadores de parâmetro %s e %d por ? ou %(name)s.
  • Use uma cadeia de conexão em vez de argumentos posicionais.
  • Sem dependência do FreeTDS.
  • Múltiplos cursores concorrentes por conexão.
  • Objetos de linha com acesso a atributos substituem as_dict=True.

Entre as versões mssql-python

Atualize o driver para obter novos recursos e correções.

pip install --upgrade mssql-python

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

Roteiro

Para recursos futuros e o roteiro de desenvolvimento, veja o repositório GitHub.