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.
Este artigo descreve novos recursos, melhorias e alterações em cada versão do back-end do banco de dados do mssql-django Django.
Versão 2,0
Data de lançamento: setembro de 2026
A versão 2.0 adiciona o driver da Microsoft mssql-python como alternativa por banco de dados ao pyodbc, atualiza a matriz de suporte do Python, Django e SQL Server e inclui correções de compatibilidade e confiabilidade.
pyodbc continua sendo o driver padrão.
Destaques
-
Suporte ao driver mssql-python: um alias de banco de dados é aceito com
"python_driver": "mssql_python"no dicionárioOPTIONS. O driver cobre conexões, pool de conexões, novas tentativas, transações e pontos de salvamento, valores datetimeoffset, introspecção e autenticação da Microsoft Entra. Aliases que omitem a opção continuam usandopyodbc, então nada muda até você aderir. Para mais informações, veja Selecionar o driver de banco de dados para mssql-django. -
Não é necessária uma instalação separada do driver ODBC no caminho do mssql-python: Um alias em
mssql-pythonnão precisa de um driver ODBC da Microsoft para SQL Server instalado externamente. Aliases que permanecem ativadospyodbcainda são aceitos. - Matriz de suporte modernizada: Python 3.10 a 3.14, Django 5.2 a 6.1 e SQL Server 2017 a 2025. Django 6.0 e versões posteriores exigem Python 3.12 ou posteriores.
Correções de erros
-
Configurações explícitas de MARS são respeitadas: um valor explícito
MARS_Connectionemextra_paramsé preservado em vez de ser substituído pelo padrão do Windows, e a correspondência não diferencia maiúsculas de minúsculas. A configuraçãoMARS_Connection=noagora funciona contra endpoints que rejeitam o MARS, incluindo o Microsoft Fabric Warehouse. Com o MARS desativado, o ORM armazena em buffer os resultados da iteração antes de retorná-los, para que uma consulta aninhada possa reutilizar a conexão, o que consome mais memória em querysets grandes. Essa correção de conexão não adiciona suporte total ao Warehouse para migrações ou outros recursos do SQL Server. -
Caracteres curinga entre colchetes são escapados em pesquisas de expressão: Pesquisas por padrão que comparam dois campos com a expressão
F(), comocontainsestartswith, escapam o caractere curinga[do SQL Server. Os caracteres de colchetes são tratados como dados em vez de como sintaxe de caractere curinga. -
As aspas são escapadas nos nomes de esquema do inspectdb: Uma aspa simples no valor
inspectdb --schemaé escapada na consulta de metadados, de modo que nomes de esquema que contêm uma aspas simples não produzam mais Transact-SQL (T-SQL) malformado. -
Um HOST vazio se conecta ao localhost na implementação mssql-python: A tag
HOSTomitida, que o Django preenche com uma string vazia, resulta emlocalhostem vez de falhar na validação com um valor vazio deSERVER=. Esse comportamento corresponde aopyodbcpadrão para instâncias locais.
Improvements
-
pytz substituído por zoneinfo e tzdata: O tratamento de fusos horários usa o módulo
zoneinfoda biblioteca padrão, com o pacotetzdatafornecendo o banco de dados de fusos horários da IANA em ambientes que não incluem esse banco de dados, como o Windows e imagens mínimas de contêiner. Os deslocamentos permanecem corretos ao longo do ano para fusos horários com deslocamento negativo no horário de verão.pytznão é mais uma dependência. -
Versões mais recentes do SQL Server são aceitas: uma versão principal do SQL Server que o backend não reconhece usa o conjunto de capacidades mais recente que o backend conhece, em vez de falhar na validação da versão. Você pode se conectar a uma nova versão do SQL Server antes que uma versão correspondente
mssql-djangoseja lançada. Aceitar a conexão não declara recursos não testados como suportados.
Alterações críticas
- Python 3.8 e 3.9, e Django 3.2 a 5.1, não são mais suportados. O código de compatibilidade das versões anteriores permanece em uso, mas essas combinações não são testadas nem listadas.
-
mssql-python1.15.0 ou posterior é uma dependência obrigatória mesmo quando um alias usapyodbc. A instalação é limitada a plataformas que possuem uma distribuição compatívelmssql-python, excluindo o SUSE Linux no ARM64. Projetos em outras plataformas permanecem na versão 1.8.0. - O suporte declarado ao SQL Server começa com o SQL Server 2017, e o suporte à conectividade nativa declarada é limitado ao Microsoft ODBC Driver 17 e Microsoft ODBC Driver 18.
Versão 1.8.0
Data de lançamento: agosto de 2026
A versão 1.8.0 adiciona suporte para Django 6.1 enquanto continua a suportar Django 3.2 até 6.0. Mover um projeto do Django 6.0 para o 6.1 não requer alterações de código, a menos que você use um dos dois recursos do Django 6.1 descritos nesta seção.
Destaques
-
Suporte ao Django 6.1: Validado contra o Django 6.1 enquanto continua a apoiar o Django 3.2 até o 6.0. A restrição de dependência se amplia de
django>=3.2,<6.1paradjango>=3.2,<6.2. -
O compilador de consultas usa
quote_nameno Django 6.1: o Django 6.1 marcouquote_name_unless_aliascomo obsoleto. O backend agora chamaSQLCompiler.quote_nameno Django 6.1 e em versões posteriores, condicionado à versão, de modo que as versões anteriores do Django permaneçam inalteradas. Consultas fatiadas e deslocadas, comoqs[a:b]eOFFSET ... FETCH, compilam sem avisos de depreciação. -
A introspecção de chaves estrangeiras retorna a regra ON DELETE: o Django 6.1 expandiu
get_relations()para incluir a regra ON DELETE no nível do banco de dados. O backend retorna a estrutura esperada de três partes e mapeia corretamente as chaves estrangeiras do SQL ServerNO ACTION, de modo queinspectdbe a introspecção de chaves estrangeiras produzam modelos corretos.
Recursos do Django 6.1 que não são suportados
Duas adições do Django 6.1 não estão disponíveis neste backend, por diferentes motivos:
-
Ações referenciais em nível de banco de dados (
DB_CASCADE,DB_SET_NULL,DB_SET_DEFAULT): SQL Server rejeita grafos de chave estrangeira com múltiplos caminhos em cascata para a mesma tabela (erro 1785), então não há caminho nativo para esse recurso em nenhuma versão do SQL Server. Usar um desses valores eleva a verificaçãofields.E324do sistema Django , que aponta para o nívelon_deletepadrão de Django . -
Agregações bit a bit (
BitAnd,BitOr,BitXor): o SQL Server não possui função nativa de agregação bit a bit, e o backend não as emula, portanto essas agregações geramNotSupportedError.
Para obter mais informações, consulte Limitações e recursos sem suporte no mssql-django.
Versão 1.7.4
Data de lançamento: julho de 2026
A versão 1.7.4 é uma atualização corretiva compatível com versões anteriores, com duas correções para o tratamento de consultas GROUP BY brutas e anotadas.
Correções de erros
-
IndexErrorem consultasGROUP BYcom%%com escape e parâmetros reais: anteriormente, qualquer consulta com uma cláusulaGROUP BYpassava por uma etapa de reescrita de placeholders que identificava padrões como%\w+e os substituía por{}. Essa expressão regular também identificava literais%%com escape, inserindo placeholders fictícios e gerandoIndexError: Replacement index N out of rangesempre que uma consulta combinava um%%com escape com um parâmetro%sreal. A expressão regular mais restrita agora afeta apenas%%(preservado literalmente) e%s(o verdadeiro marcador de posição), que é o único padrão que o compilador emite. A mesma correção também evita um bug silencioso não relacionado, no qual um padrão sem escape, comoLIKE '%abc%', em uma consulta sem parâmetros, era regravado comoLIKE '{}%'e exibia linhas incorretas. -
NotImplementedErrorparaIntegerChoicesem consultasGROUP BYbrutas: Anteriormente, passar um valorIntegerChoicespara uma consulta bruta que continha uma cláusulaGROUP BYgeravaNotImplementedError: Not supported type <enum ...>. O auxiliar de tipagem de parâmetros usava verificações exatas de tipo (typ == int), etype(IntegerChoices_value)corresponde à classe do enum, e não aint. Por isso, o valor acabava chegando à exceção, mesmo sendo uma subclasse deint. As verificações de tipo agora usamisinstance, e o ramoboolé avaliado antes do ramoint(porqueboolé, ele próprio, uma subclasse deint). As opções de enum agora são associadas corretamente,boolainda se associa aBIT, e ointsimples permanece inalterado.
Versão 1.7.3
Data de lançamento: junho de 2026
A versão 1.7.3 é uma atualização de patch compatível com versões anteriores, com duas correções relacionadas à conexão e ao tempo de execução.
Correções de erros
-
FA001para modos deAuthentication=diferentes deActiveDirectoryMsi: anteriormente, o backend ignoravaTrusted_Connection=yesapenas paraActiveDirectoryMsi. Outros modos do Entra que não fornecem um valorUSER(por exemplo,ActiveDirectoryIntegrated,ActiveDirectoryDefault,ActiveDirectoryDeviceFlow) ainda recebiamTrusted_Connection=yes, que o driver ODBC rejeitava com o erroFA001(Cannot use Authentication option with Integrated Security option). A correção detecta qualquer valorAuthentication=explícito com uma correspondência que diferencia maiúsculas de minúscula com reconhecimento de limite e ignoraTrusted_ConnectioneIntegrated Security=SSPI. O tratamento de senhas permanece inalterado:SqlPassword,ActiveDirectoryPassword, eActiveDirectoryServicePrincipalcontinuam a enviarPWD, enquantoActiveDirectoryInteractivecontinua a omitê-lo. -
KeyErrorem subclasses deDatabaseWrapper: As propriedades em cachesql_server_versioneto_azure_sql_dbdependiam da introspecção detype(self).__dict__decached_property, o que geravaKeyErrorna primeira vez que uma subclasse deDatabaseWrapperas acessava (uma regressão introduzida na versão 1.7.1). A correção usa dicionários explícitos de nível da classe (_known_versions,_known_azures), acessados por meio deself., de modo que a pesquisa seja resolvida por meio de MRO e os wrappers em subclasses funcionem corretamente.
Versão 1.7.2
Data de lançamento: maio de 2026
A versão 1.7.2 é uma versão de correção retrocompatível com correções de fuso horário e compatibilidade.
Correções de erros
-
.explain()compatibilidade com o Django 4.0 e versões posteriores: Corrigido o tratamento do compilador dos metadados de explain do Django para que.explain()não falhe mais comAttributeErrorno Django 4.0 e versões posteriores. O back-end agora segue os campos de explicação adequados para a versão e gera corretamenteNotSupportedErrorquando necessário. - Tratamento de fuso horário de datetimeoffset: correção da análise de datetimeoffset para que os deslocamentos de fuso horário sejam preservados em vez de descartados. As datas e as horas retornadas agora incluem informações de fuso horário quando esperado.
-
Now()comUSE_TZ=True: geração de SQL atualizada deNow()para usar um comportamento de reconhecimento de fuso horário quando o suporte a fuso horário estiver habilitado, evitando descompassos de carimbo de data/hora em hosts do SQL Server que não usam UTC.
Versão 1.7.1
Data de lançamento: abril de 2026
A versão 1.7.1 é um lançamento de correção compatível com versões anteriores, com correções de bugs.
Correções de erros
-
FieldDoesNotExistao alterar campos com ordenação decrescente de índice: Corrigido_alter_field()emschema.pypara usarindex.fields_ordersem vez deindex.fieldsao resolver os nomes dos campos de índice. O código anterior passou campo bruto com ordenação de cadeias de caracteres (por exemplo,"-pub_date") paramodel._meta.get_field(), o que gerouFieldDoesNotExist. Agora, somente o nome do campo é extraído, e o sufixo de ordenação é descartado corretamente. -
Suporte ao Banco de Dados SQL no Microsoft Fabric (EngineEdition 12): reconhecimento do Banco de Dados SQL no Fabric (
EngineEdition=12) como uma edição do Azure. Anteriormente, a edição do mecanismo do Fabric não era reconhecida, fazendo com queto_azure_sql_dbretornasseFalsee que as verificações de feature gate falhassem. A correção adicionaEDITION_AZURE_SQL_FABRIC=12_AZURE_EDITIONSe mapeia Fabric à versão de SQL Server com suporte mais recente.JSONField, as funções de hash, a introspecção de ordenação e a desmontagem do banco de dados de teste agora funcionam corretamente no Fabric.
Versão 1.7
Data de lançamento: março de 2026
Destaques
- Suporte ao Django 6.0: compatibilidade completa com o Django 6.0, que requer Python 3.12 ou posterior. Todas as alterações de API 6.0 são tratadas de forma transparente pelo back-end.
-
Suporte parcial
CompositePrimaryKey: o back-end adiciona suporte parcial ao Django 5.2CompositePrimaryKey. A comparação de tuplas em relação às subconsultas requer o Django 5.2.4 ou versões posteriores, e alguns casos extremos envolvendo chaves compostas e casos de bordaJSONFieldpermanecem. O próprio Django 5.2 foi apoiado pela primeira vez no mssql-django 1.6. - Suporte ao SQL Server 2025: Validado para SQL Server 2025.
- ODBC Driver 18 como padrão: o backend agora passa a usar por padrão o ODBC Driver 18 para SQL Server, com fallback automático para o ODBC Driver 17 se a versão 18 não estiver instalada.
Notas específicas da versão
| Versão do Django | Observações |
|---|---|
| Django 5.1 |
inspectdb pode inspecionar tabelas com chaves primárias compostas, mas não gera definições de modelo completas para elas. |
| Django 5.2 |
CompositePrimaryKey o suporte é parcial. A comparação de tuplas com subconsultas requer o Django 5.2.4 ou superior, e ainda há alguns casos de borda JSONField mais migração permanecem. |
| Django 6.0 | Requer Python 3.12 ou posterior. Todas as limitações 5.2 se aplicam. |
Versão 1.6
Data de lançamento: agosto de 2025
- Adicionado suporte ao Django 5.1 e 5.2.
- Funcionalidade de JSON aprimorada e compatibilidade com versões anteriores.
- Infraestrutura de pipeline aprimorada.
Versão 1.5
Data de lançamento: abril de 2024
- Adicionado sinalizador de funcionalidade
supports_commentsparadb_comments. - Correções de erros para
AutoField, formatação de parâmetros e consultas de esquemas.
Versão 1.4
Data de lançamento: janeiro de 2024
- Adicionado suporte ao Django 5.0.
- Suporte
db_commentadicionado. - Correções de bug para conversões de data/hora e agregações vazias.
Versão 1.3
Data de lançamento: maio de 2023
- Adicionado suporte ao Django 4.2.
- Adição de suporte à função
Replaceque diferencia maiúsculas de minúsculas. - Correções de bugs no tratamento de
OFFSETe no preenchimento à esquerda.
Versão 1.2
Data de lançamento: dezembro de 2022
- Adicionado suporte ao Django 4.1.
- Adicionado suporte a fuso horário (datetimeoffset com
USE_TZ=True). - Adicionada a opção
return_rows_bulk_insertpara recuperação do ID de inserção em lote. - Adicionado suporte ao SQL Server 2022.
- Adicionado suporte para
JSONFieldInstância Gerenciada de SQL do Azure.
Versão 1.1
Data de lançamento: julho de 2022
- Suporte ao Django 3.2 e 4.0.
- Há suporte para SQL Server 2016 e posteriores, e para o Banco de Dados SQL do Azure.
- Conectividade baseada em
pyodbc.