Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo lista o que mudou em cada versão do driver mssql-python, o mais recente primeiro. Cada secção cobre novas funcionalidades, alterações de comportamento e correções de bugs para uma versão.
Para as versões que a Microsoft suporta atualmente, veja Ciclo de vida de Suporte.
mssql-python 1.14.0
Data de lançamento: agosto de 2026
Enhancements
A deteção e ligação de parâmetros são executadas em código nativo
A deteção e a associação dos tipos de parâmetros são agora executadas numa única cadeia de processamento nativa, em vez de chamadas em Python por parâmetro. Esta alteração corrige um estrangulamento significativo de desempenho, com maiores melhorias na taxa de transferência de ponta a ponta em operações de maior dimensão, como inserções em massa. Não é necessária qualquer alteração na candidatura.
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, passou a ser o tempo limite da consulta por instrução, pelo que connect(timeout=30) não limitava quanto tempo uma tentativa de ligação podia demorar e interrompia as consultas após 30 segundos. O tempo limite da consulta por declaração continua disponível como a Connection.timeout propriedade.
Importante
Se tiver passado timeout a connect() para abortar consultas de execução prolongada, esse comportamento já não ocorre. Defina Connection.timeout em vez disso. O mesmo se aplica se recorreu a connect(timeout=) para aumentar o tempo limite de ligação que bulkcopy() usa para a sua ligação interna: defina Connection.timeout antes de criar o cursor.
Para mais informações, consulte Tempo limite da ligação.
bulkcopy() Rejeitado timeout=0
Um valor de 0 de 0 gerou um erro de validação, embora timeout signifique ausência de limite de tempo na API de cópia em massa subjacente. O método agora aceita 0 e desativa o tempo limite da operação. Valores negativos, não inteiros e booleanos continuam a ser rejeitados.
Para mais informações, consulte Cópia em massa.
A limpeza substituiu a exceção original de busca do Arrow
Quando uma obtenção a partir de um leitor Arrow falhava, a rotina de limpeza do controlador gerava um segundo erro que substituía o erro original, pelo que o código chamador via uma falha de limpeza em vez do motivo pelo qual a obtenção falhou. A limpeza agora verifica primeiro o estado do cursor e preserva a exceção original.
executemany() Os erros de conversão decimal incluíam valores de parâmetros
Uma falha na conversão decimal em executemany() comunicava o valor que causou o erro através da exceção encadeada, o que podia colocar dados de clientes nos registos da aplicação e nos sistemas de monitorização. O erro agora reporta apenas o índice de linhas, o índice da coluna e o tipo de valor.
Para obter mais informações, consulte Tratamento de erros.
Cópias em massa rejeitadas por tipos de Arrow View
bulkcopy_arrow() não podia consumir arrays Arrow View de comprimento variável, por isso as colunas string_view do Polars tinham primeiro de ser convertidas com DataFrame.to_arrow(). Os valores da Vista de Strings e os NULLs passam agora diretamente pela Interface de Dados Arrow C.
Para mais informações, veja integração com Polars.
O carregamento das extensões do Windows utilizava a arquitetura do CPU anfitrião
No Windows, o driver escolhia a sua extensão nativa com base no processador host em vez do interpretador em execução, por isso o Python x64 num host ARM64 carregava através de um caminho de reserva e escrevia avisos para o stdout. O carregador deriva agora a arquitetura do interpretador e assinala 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 fornecidos apenas em mssql-python-odbc
A versão 1.13.0 remove o fallback de libs/ do wheel mssql-python e declara mssql-python-odbc==18.6.2.1 em install_requires. O comando pip install mssql-python continua a gerar um controlador funcional. Instala mssql-python-odbc explicitamente quando instalares com --no-deps, ou a partir de um índice privado que não o espelhe.
Para obter mais informações, consulte Instalação.
Cópia em massa de fontes Apache Arrow
O novo cursor.bulkcopy_arrow() método carrega dados que já estão em formato Apache Arrow, sem converter cada linha em objetos Python primeiro. Ao passar uma origem Arrow para bulkcopy(), agora gera TypeError.
Para mais informações, consulte 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, por isso pode passar um objeto credencial, como DefaultAzureCredential em vez de nomear um modo de autenticação na cadeia de ligação. O argumento é incompatível com a palavra-chave Authentication e com os tokens transmitidos através de attrs_before, e suporta apenas o âmbito da cloud comercial do Azure.
Para obter mais informações, consulte Autenticação do Microsoft Entra.
Agrupamento de ligações com reconhecimento da identidade
O conjunto de ligações agora separa as ligações com base na identidade Microsoft Entra. Em versões anteriores, o pool era indexado apenas pela cadeia de ligação, o que permitia fornecer uma ligação autenticada como um utilizador a um pedido feito por outro. O controlador também adquire um token apenas quando um pedido de ligação não encontra correspondência no pool e atualiza uma ligação do pool quando faltam menos de 5 minutos para o respetivo token expirar.
Para mais informações, consulte agrupamento de ligações.
Correções de erros
executemany() não inseriu nenhuma linha quando surgiam valores NULL após a primeira linha
Uma chamada executemany() que misturava valores numéricos não-NULL e NULL não inseria nenhuma linha nem levantava qualquer exceção, quando o primeiro NULL aparecia após a primeira linha. Este comportamento afetava parâmetros de tinyint, smallint, int e float . O driver inicializa agora os indicadores ODBC para cada parâmetro numérico de largura fixa antes da execução do array.
Um SQL_WVARCHAR conversor de saída transformou colunas que não eram cadeias de caracteres
Registar um único conversor de strings também transformava os valores int, decimal e date, porque o controlador recorria ao conversor SQL_WVARCHAR para qualquer coluna que não tivesse o 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 registados por código inteiro do tipo SQL nunca foram executados
Conversores registados 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 faz agora primeiro a seleção com base no código numérico inteiro, depois no tipo Python e, por fim, no recurso de fallback SQL_WVARCHAR.
Importante
Se registou conversores por código inteiro do tipo SQL numa versão anterior, esses conversores começam a funcionar quando atualiza. Reveja-os antes de implementar, porque os valores das colunas que antes passavam sem alterações agora são transformados.
Para mais informações, consulte Conversores de tipo personalizado.
Fechar um leitor Arrow não libertou o cursor do lado do servidor
Fechar um leitor Arrow deixava o cursor alocado no servidor e o elemento pai Cursor num estado inconsistente, porque cursor.arrow_reader() devolvia um pyarrow.RecordBatchReader bruto. O método devolve agora um wrapper cujo close() método liberta o cursor do lado do servidor e redefine o estado do cursor, e o wrapper funciona como gestor de contexto.
Para mais informações, consulte integração com o Apache Arrow.
Um cursor parcialmente inicializado gerou AttributeError em Cursor.__del__
Um cursor cujo inicializador falhou levantou a AttributeError como exceção não levantável durante a recolha de lixo.
Cursor.__init__ foi acionado antes de definir os atributos closed e hstmt, que __del__ depois tentou ler. O inicializador agora define ambos os atributos antes de qualquer código que possa ser levantado e __del__ protege a sua chamada de registo para que permaneça segura durante o encerramento do interpretador.
mssql-python 1.12.0
Data de lançamento: julho de 2026
Enhancements
Pacote complementar independente mssql-python-odbc
Os binários dos drivers ODBC são agora publicados separadamente como mssql-python-odbc, um pacote complementar apenas de dados fixado na versão 18.6.2. Não precisas de alterar 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 este não está presente.
Para obter mais informações, consulte Instalação.
Correções de erros
cursor.bulkcopy() passa a usar o tempo limite de ligação da conexão principal
bulkcopy() passa a usar o tempo limite de ligação da sua ligação principal, que define com connect(..., timeout=<seconds>). Anteriormente, a ligação separada que a cópia em bloco abria usava um tempo limite de ligação de 15 segundos fixo no código, que não podia ser alterado a partir de Python. Uma ligação principal criada com timeout=0 continua a ter o valor predefinido de 15 segundos.
Para mais informações, consulte Cópia em massa.
cursor.bulkcopy() suporta colunas de tipos CLR definidas pelo utilizador
cursor.bulkcopy() anteriormente falhou com Protocol Error: Unsupported TDS type for bulk copy: 0xF0 para qualquer coluna de destino que utilizasse um tipo definido pelo utilizador do Common Language Runtime (CLR), incluindo os tipos incorporados geography, geometry e hierarchyid. O driver agora mapeia as colunas UDT do CLR para varbinary(max) no fio e transmite os bytes que forneces como carga útil do IBinarySerialize UDT. A correção é disponibilizada na versão mssql_py_core 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 melhorada do gestor de contexto
with connection: agora compromete a transação quando o bloco sai limpo, e reverte-a quando uma exceção sai do bloco.
Para mais informações, consulte Gestão de Transações.
Correções de erros
- Corrigido um interbloqueio do GIL no processo de encerramento do ODBC (
conn.close()ecursor.close()) e emSQLDescribeParampara parâmetros com valorNoneem configurações com túnel SSH e com encaminhador no processo. - Parâmetros fixos
BINARYeVARBINARYNULL 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_pythonem 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 arquiteturasarm64ex86_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() Agora suporta Authentication=ActiveDirectoryServicePrincipal, por isso podes inserir em massa com credenciais de principal de serviço.
Para mais informações, consulte Cópia em massa e autenticação Microsoft Entra.
Correções de erros
- Corrigidos os dados não ASCII
VARCHAReCHARno 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.
Para mais informações, consulte Cópia em massa e Objetos de linha.
Correções de erros
- Embalagem de rodas fixas, por isso
simdutfestá sempre ligada estaticamente. - Fixei inserções grandes
DECIMALemexecutemany(). - 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 mensagensPRINTentre diferentes conjuntos de resultados. - Manipulação corrigida
Rownoexecutemany()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.
Para mais informações, consulte Cópia em massa e autenticação Microsoft Entra.
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.
Para mais informações, consulte objetos de linha.
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 inclui:
- Jantes compatíveis com RHEL 8.
- Restaurei as rodas do macOS Python 3.10
universal2. - Melhoria no processamento 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 quente no execute() método.
Para obter mais informações, consulte Instalação.
Correções de erros
- Foram corrigidas falhas de autenticação para que gerem exceções da DB-API
mssql_pythonem vez deRuntimeError. - 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
VARCHARentre plataformas. - Corrigidas as falhas de
cursor.bulkcopy()para strings vazias nas colunasNVARCHAR(MAX)eVARCHAR(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
A sanitização das cadeias de ligação utiliza agora um analisador sintático em vez de expressões regulares, pelo que as cadeias de ligação que contêm caracteres especiais nos campos de palavra-passe e valores entre chavetas são corretamente analisadas.
Para obter mais informações, consulte Cadeias de conexão.
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 comSQL_DECIMALeSQL_NUMERICdicas. - 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 umpyarrow.Tablecompleto. -
cursor.arrow_batch()devolve um únicopyarrow.RecordBatch. -
cursor.arrow_reader()devolve umpyarrow.RecordBatchReaderpara transmissão em fluxo.
Estes métodos não criam um objeto Python para cada valor. 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.
Para mais informações, consulte Mapeamentos de tipos de dados.
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 cada ligação.
Para mais informações, consulte Configuração do módulo.
Classe de linha de exportação pública
A classe Row é agora exportada no nível superior para anotações de tipo.
Para mais informações, consulte objetos de linha.
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.timede ponto fixo perdiam os microssegundos em operações de ida e volta para colunas deTIME(1)aTIME(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: fevereiro de 2026
Novas funcionalidades
Suporte para cópia em massa
O carregamento em massa de dados de alto desempenho está agora disponível por meio de cursor.bulkcopy(). 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.
Para mais informações, consulte Cópia em massa.
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 2026
Novas funcionalidades
Classe de definições
Configure o comportamento ao nível do módulo através da nova classe Settings, que inclui a definição lowercase para nomes de colunas em cursor.description.
Para mais informações, consulte Configuração do módulo.
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: janeiro de 2026
Novas funcionalidades
Métodos de descoberta de esquemas
Novos métodos de cursor exploram metadados de bases de dados: tables(), columns(), primaryKeys(), foreignKeys(), procedures(), statistics(), , e getTypeInfo().
Para mais informações, consulte Descoberta de esquemas.
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: dezembro de 2025
Novas funcionalidades
Conversores de saída personalizados
Registar funções personalizadas para transformar os valores das colunas durante a busca, com add_output_converter(), get_output_converter(), remove_output_converter(), e clear_output_converters().
Para mais informações, consulte 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: novembro de 2025
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.
Para mais informações, consulte o driver mssql-python.
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(), ebatch_execute(). - Atributos de ligação através de
set_attr()egetinfo(). - 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()eexecutemany(). - 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çõesEXECUTEem 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
%se%dpor?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.