Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Cada versão do driver mssql-python introduz novos recursos, melhorias de desempenho e correções de bugs. As seções seguintes detalham todas as versões.
mssql-python 1.11.0
Data de lançamento: julho de 2026
Enhancements
Semântica aprimorada do gerenciador de contexto
with connection: agora confirma corretamente as transações ao encerrar normalmente e as desfaz em caso de exceção, o que o torna 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 deadlock do GIL na rotina de encerramento do ODBC (
conn.close()ecursor.close()) e emSQLDescribeParampara parâmetros com valorNoneem configurações com túnel SSH e com forwarder 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 agora emite um aviso em Python com orientação explícitacursor.setinputsizes(). - Corrigido o problema em que
import mssql_pythonfalhava 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 arquiteturasarm64ex86_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 suporta Authentication=ActiveDirectoryServicePrincipal, permitindo inserções em massa usando 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
VARCHAReCHARno caminho de busca do Arrow. - Prazos de conexão fixos durante operações de carga a granel.
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.
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 roda fixa, então
simdutfestá sempre ligada estaticamente. - Fixaram grandes
DECIMALinserts emexecutemany(). - Corrigido o tipo incorreto de fallback para parâmetros NULL.
- Exceção fixa das viagens de ida e volta de pickle e despepilha.
- Corrigido
nextset()para que preservePRINTmensagens entre diferentes conjuntos de resultados. - Tratamento corrigido
Rownoexecutemany()caminho de fallback de dados na execução. - Fixou a verificação de tipos de método fetch 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 oferece suporte a Authentication=ActiveDirectoryMSI para identidades gerenciadas atribuídas pelo sistema e atribuídas pelo usuário.
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 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.
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 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.
- 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 ampliada das rodas e melhorias de desempenho
Esta versão adiciona wheels compatíveis com o RHEL 8, restaura os wheels do Python 3.10 para macOS universal2, melhora o tratamento de UTF-16 por meio de simdutf e otimiza o caminho crítico de execute().
Impacto no desempenho: A taxa de execução em lote melhora em ~15% em relação às cargas de trabalho típicas devido às otimizações do caminho quente no execute() método.
Correções de erros
- Falhas de login foram corrigidas para que gerem exceções
mssql_pythonDB-API em vez deRuntimeError. - 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. - Corrigi a decodificação inconsistente do CP1252
VARCHARentre plataformas. - Corrigidas falhas com strings vazias nas colunas
NVARCHAR(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 conexão baseada em analisador sintático
Esse aprimoramento garante a interpretação correta de caracteres especiais nos campos de senha e em valores entre chaves.
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 conexão passou da lógica baseada em expressões regulares para o processamento com analisador sintático, para o tratamento correto da sintaxe da cadeia de conexão ODBC.
Correções de erros
- Corrigida a liberação do GIL durante operações bloqueantes de conexão e desconexão via ODBC.
- Corrigi
setinputsizes()travamentos comSQL_DECIMALeSQL_NUMERICdicas. - 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. - Dicas de tipo fixo
executemany()para sequências de parâmetros baseadas em mapeamento. - Adicionou 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 umpyarrow.Tablecompleto. -
cursor.arrow_batch()retorna um únicopyarrow.RecordBatch. -
cursor.arrow_reader()retornapyarrow.RecordBatchReaderpara streaming.
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 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
sql_variant Colunas usam um caminho de busca em streaming, que pode ter um leve impacto no desempenho em comparação com colunas do tipo fixo.
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 em nível de módulo ou por conexã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, veja Configuração do módulo.
Exportação pública da classe Row
A Row classe agora é exportada no nível superior para anotações de tipos:
from mssql_python import Row
Correções de erros
- Corrigiu 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
VARBINARYcolunas (não gera mais erros implícitos de conversão). - Corrigida a perda de microssegundos em valores
datetime.timedurante operações de ida e volta para colunas deTIME(1)aTIME(7). - Corrigido o caminho de busca do Arrow para incluir corretamente frações de segundo para colunas
TIME. - Cópia em massa corrigida 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: março de 2025
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()
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_constraintstable_lock, , keep_nulls, fire_triggers, e use_internal_transaction.
Consulte Cópia em massa para obter a documentação completa.
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 2025
Novos recursos
Classe de configuraçõ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
Veja Configuração do módulo para detalhes.
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: novembro de 2024
Novos recursos
Métodos de descoberta de esquemas
Novos métodos de cursor para exploração de metadados de banco 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()
Veja Descoberta de Esquema para documentação completa.
Improvements
- Cache aprimorado de metadados para consultas repetidas de esquema.
- Melhor manejo das colunas computadas nos
columns()resultados.
mssql-python 1.1.0
Data de lançamento: setembro de 2024
Novos recursos
Conversores de saída personalizados
Registrar funções personalizadas para transformar valores de coluna durante a busca:
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 documentação completa, 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: julho de 2024
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.
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 autocommit.
- Métodos de execução:
execute(),executemany(), ebatch_execute(). - Atributos de conexão através de
set_attr()egetinfo(). - 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()eexecutemany(). - 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
- Commit e rollback 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çõesEXECUTEem 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
%se%dpor?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 lançamento para ver se há mudanças quebrantes antes de atualizar os sistemas de produção.
Roteiro
Para recursos futuros e o roteiro de desenvolvimento, veja o repositório GitHub.