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 descreve novas funcionalidades, melhorias e alterações em cada versão do backend da mssql-django base de dados Django.
Versão 2.0
Data de lançamento: setembro de 2026
A versão 2.0 adiciona o controlador mssql-python da Microsoft como alternativa ao nível da base de dados a pyodbc, atualiza a matriz de compatibilidade de Python, Django e SQL Server e inclui correções de compatibilidade e fiabilidade.
pyodbc continua a ser o driver padrão.
Destaques
-
suporte para o controlador mssql-python: Um alias de base de dados adere com
"python_driver": "mssql_python"no seu dicionárioOPTIONS. O driver cobre conexões, agrupamento de conexões, novas tentativas, transações e pontos de restauro, valores datetimeoffset, introspeção e a autenticação Microsoft Entra. Os pseudónimos que omitem a opção continuam a usarpyodbc, por isso nada muda até te inscreveres. Para mais informações, consulte Selecionar o driver da base de dados para mssql-django. -
Não é necessária uma instalação separada do controlador ODBC ao usar o mssql-python: Um alias em
mssql-pythonnão precisa de um Controlador ODBC da Microsoft para SQL Server instalado à parte. Os pseudónimos que continuam empyodbccontinuam a fazê-lo. - Matriz de suporte modernizada: Python 3.10 a 3.14, Django 5.2 a 6.1, e SQL Server 2017 a 2025. O Django 6.0 e versões posteriores requerem Python 3.12 ou posteriores.
Correções de erros
-
As definições explícitas do MARS são respeitadas: Um valor explícito
MARS_Connectionemextra_paramsé preservado em vez de ser sobrescrito pelo padrão do Windows, e a correspondência ignora o caso. A configuraçãoMARS_Connection=noagora funciona contra endpoints que rejeitam o MARS, incluindo o Microsoft Fabric Warehouse. Com o MARS desativado, a iteração do ORM armazena os resultados antes de os fornecer, para que uma consulta aninhada possa reutilizar a ligação, o que consome mais memória em grandes conjuntos de consultas. Esta correção de ligação não adiciona suporte total ao Warehouse para migrações ou outras funcionalidades do SQL Server. -
Os carateres universais entre colchetes são escapados nas pesquisas de expressões: As pesquisas de padrões que comparam dois campos com uma expressão
F(), comocontainsestartswith, escapam o caráter universal[do SQL Server. Os caracteres entre parênteses são associados como dados em vez de como sintaxe coringa. -
As aspas são escapadas nos nomes de esquemas no inspectdb: Uma aspa simples no valor
inspectdb --schemaé escapada na consulta de metadados, pelo que os nomes de esquemas que contêm uma aspa deixam de produzir instruções Transact-SQL (T-SQL) malformadas. -
Um HOST vazio liga ao localhost no caminho mssql-python: A omissão de
HOST, que o Django preenche como uma string vazia, é resolvida paralocalhostem vez de falhar na validação com um valorSERVER=vazio. Este comportamento corresponde aopyodbcpadrão para instâncias locais.
Improvements
-
O pytz foi substituído por zoneinfo e tzdata: A gestão dos fusos horários utiliza o módulo da biblioteca padrão
zoneinfo, sendo o pacotetzdataresponsável por fornecer a base de dados de fusos horários da IANA em ambientes que não a incluem, como o Windows e imagens de contentor mínimas. Os desvios mantêm-se corretos durante todo o ano para fusos horários com desvios negativos da hora de verão.pytzjá não é uma dependência. - São aceites versões mais recentes do SQL Server: uma versão principal do SQL Server que o backend não reconhece utiliza o conjunto de capacidades mais recente que o backend conhece, em vez de falhar a validação da versão. Podes ligar-te a uma nova versão do SQL Server antes de uma versão correspondente
mssql-djangoser lançada. Aceitar a ligação não declara as funcionalidades não testadas como suportadas.
Alterações de grande impacto
- Python 3.8 e 3.9, e Django 3.2 a 5.1, já não são suportados. O código de compatibilidade das versões anteriores mantém-se, 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 está limitada a plataformas que tenham uma distribuição compatívelmssql-python, excluindo o SUSE Linux no ARM64. Os projetos noutras plataformas mantêm-se 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 está limitado ao Microsoft ODBC Driver 17 e ao 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, continuando 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 utilize uma das duas funcionalidades do Django 6.1 descritas nesta secção.
Destaques
-
Suporte ao Django 6.1: Validado contra o Django 6.1 enquanto continua a apoiar o Django 3.2 até ao 6.0. A restrição de dependência alarga-se de
django>=3.2,<6.1paradjango>=3.2,<6.2. -
O compilador de consultas usa
quote_nameno Django 6.1: o Django 6.1 descontinuouquote_name_unless_alias. O backend passa agora a chamarSQLCompiler.quote_nameno Django 6.1 e em versões mais recentes, condicionado pela versão, pelo que as versões anteriores do Django permanecem inalteradas. Consultas fatiadas e deslocadas, comoqs[a:b]eOFFSET ... FETCH, compilam sem avisos de depreciação. -
A introspeção de chaves estrangeiras passa a devolver a regra ON DELETE: o Django 6.1 expandiu
get_relations()para incluir a regra ON DELETE ao nível da base de dados. O backend retorna a estrutura de três partes esperada e mapeia as chaves estrangeiras do SQL ServerNO ACTIONem conformidade, pelo queinspectdbe a introspeção de chaves estrangeiras produzem modelos corretos.
Funcionalidades do Django 6.1 que não são suportadas
Duas adições do Django 6.1 não estão disponíveis neste backend, por razões diferentes:
-
Ações referenciais ao nível da base de dados (
DB_CASCADE,DB_SET_NULL,DB_SET_DEFAULT): o SQL Server rejeita grafos de chave estrangeira com múltiplos caminhos em cascata para a mesma tabela (erro 1785), pelo que não existe um caminho nativo para esta funcionalidade em nenhuma versão do SQL Server. Usar um destes valores eleva a verificaçãofields.E324do sistema Django , que o aponta para o nívelon_deletepadrão de Django . -
Agregações bit a bit (
BitAnd,BitOr,BitXor): o SQL Server não tem funções nativas de agregação bit a bit, e o backend não as emula, pelo que estas agregações geramNotSupportedError.
Para mais informações, consulte Limitações e funcionalidades não suportadas no mssql-django.
Versão 1.7.4
Data de lançamento: julho de 2026
A versão 1.7.4 é uma atualização retrocompatível com duas correções para o tratamento de consultas brutas e anotadas GROUP BY .
Correções de erros
-
IndexErrorem consultasGROUP BYcom parâmetros com escape%%e parâmetros reais: Anteriormente, qualquer consulta com uma cláusulaGROUP BYpassava por uma etapa de reescrita de marcadores de posição que correspondia a%\w+e o substituía por{}. Esse regex também fazia correspondência com literais com escape%%, o que injetava placeholders fantasma e geravaIndexError: Replacement index N out of rangesempre que uma consulta combinava um escape%%com um parâmetro real%s. A expressão regular, agora mais restrita, afeta apenas%%(preservado literalmente) e%s(o verdadeiro marcador de posição), que é o único padrão que o compilador alguma vez gera. A mesma correção também evita um bug silencioso não relacionado, em que um padrão não escapado, comoLIKE '%abc%', numa consulta sem parâmetros, foi reescrito paraLIKE '{}%'e devolveu as linhas erradas. -
NotImplementedErrorparaIntegerChoicesem consultasGROUP BYem bruto: Anteriormente, passar um valorIntegerChoicespara uma consulta em bruto que continha uma cláusulaGROUP BYgeravaNotImplementedError: Not supported type <enum ...>. O auxiliar de tipagem do parâmetro usava verificações exatas de tipo (typ == int), etype(IntegerChoices_value)é a classe de enumeração em vez deint, pelo que o valor acabou por chegar à instrução raise, embora seja uma subclasse deint. As verificações de tipo agora usamisinstance, e o ramoboolé avaliado antes dointramo (porqueboolé ela própria umaintsubclasse). As escolhas de enum agora associam-se corretamente,boolcontinua a associarBIT, e o simplesintmantém-se inalterado.
Versão 1.7.3
Data de lançamento: junho de 2026
A versão 1.7.3 é uma versão de patch retrocompatível com duas correções de ligação e runtime.
Correções de erros
-
FA001paraAuthentication=modos que não sejamActiveDirectoryMsi: Anteriormente, o back-end ignoravaTrusted_Connection=yesapenas paraActiveDirectoryMsi. Outros modos Entra que não fornecem umUSERvalor (por exemplo,ActiveDirectoryIntegrated,ActiveDirectoryDefault,ActiveDirectoryDeviceFlow) ainda receberamTrusted_Connection=yes, que o driver ODBC rejeitou comFA001(Cannot use Authentication option with Integrated Security option). A correção deteta qualquer valor explícitoAuthentication=com uma correspondência que tem em conta os limites e sem distinção entre maiúsculas e minúsculas, e ignora tantoTrusted_ConnectioncomoIntegrated Security=SSPI. O tratamento das palavras-passe mantém-se inalterado:SqlPassword,ActiveDirectoryPasswordeActiveDirectoryServicePrincipalcontinuam a enviarPWD, enquantoActiveDirectoryInteractivecontinua a omiti-lo. -
KeyErrorna subclasseDatabaseWrapper: As propriedades cachesql_server_versioneto_azure_sql_dbdependiam datype(self).__dict__introspeção decached_property, que surgiuKeyErrorna primeira vez que umaDatabaseWrappersubclasse as acedeu (uma regressão introduzida na 1.7.1). A correção usa dicts explícitos ao nível da classe (_known_versions,_known_azures) acedidos através deself., pelo que a pesquisa resolve-se através do MRO e os wrappers subclassados funcionam corretamente.
Versão 1.7.2
Data de lançamento: maio de 2026
A versão 1.7.2 é um patch retrocompatível com correções de fuso horário e compatibilidade.
Correções de erros
-
.explain()compatibilidade com Django 4.0 e posteriores: Corrigido o processamento, pelo compilador, dos metadados de explain do Django para que.explain()deixe de falhar comAttributeErrorno Django 4.0 e posteriores. O backend agora segue campos explicativos apropriados à versão e levantaNotSupportedErrorcorretamente quando necessário. - processamento do fuso horário de datetimeoffset: Corrigida a análise de datetimeoffset para que os offsets de fuso horário sejam preservados em vez de serem descartados. Os valores de data e hora devolvidos incluem agora informação de fuso horário, quando esperado.
-
Now()comUSE_TZ=True: Geração de SQL atualizada paraNow()utilizar um comportamento sensível ao fuso horário quando o suporte a fusos horários está ativado, evitando desvios de carimbos temporais em anfitriões do SQL Server que não utilizam UTC.
Versão 1.7.1
Data de lançamento: abril de 2026
A versão 1.7.1 é uma atualização retrocompatível com correções de bugs.
Correções de erros
-
FieldDoesNotExistao alterar campos com ordenação de índice decrescente: Fixado_alter_field()emschema.pypara usarindex.fields_ordersem vez deindex.fieldsao resolver nomes de campos de índice. O código anterior passava cadeias brutas de campo com ordenação (por exemplo,"-pub_date") paramodel._meta.get_field(), o que elevavaFieldDoesNotExist. Agora, apenas o nome do campo é extraído e o sufixo de ordenação é corretamente removido. -
Suporte para base de dados SQL no Microsoft Fabric (EngineEdition 12): Reconheceu a base de dados SQL no Fabric (
EngineEdition=12) como uma edição Azure. Anteriormente, a edição do motor Fabric não era reconhecida, fazendo com queto_azure_sql_dbdevolvesseFalsee que as verificações de controlo de funcionalidades falhassem. A correção adicionaEDITION_AZURE_SQL_FABRIC=12_AZURE_EDITIONSe mapeia o Fabric para a versão mais recente suportada do SQL Server.JSONField, funções hash, introspeção de ordenação e eliminação da base de dados de teste funcionam agora corretamente no Fabric.
Versão 1.7
Data de lançamento: março de 2026
Destaques
- Suporte para Django 6.0: Compatibilidade total com Django 6.0, que requer Python 3.12 ou posterior. Todas as alterações à API 6.0 são tratadas de forma transparente pelo backend.
-
Suporte parcial
CompositePrimaryKey: O backend adiciona suporte parcial para Django 5.2CompositePrimaryKey. A comparação de tuplos com subconsultas requer o Django 5.2.4 ou versão posterior, e alguns casos limite de chaves compostas e deJSONFieldpermanecem. O próprio Django 5.2 foi inicialmente suportado no mssql-django 1.6. - Suporte ao SQL Server 2025: Validado contra o SQL Server 2025.
- ODBC Driver 18 predefinido: O backend passa agora a predefinir o ODBC Driver 18 para o SQL Server, com reversão automática para o ODBC Driver 17 se a versão 18 não estiver instalada.
Notas específicas de versão
| Versão Django | Notes |
|---|---|
| Django 5.1 |
inspectdb Pode inspecionar tabelas com chaves primárias compostas, mas não gera definições completas do modelo para elas. |
| Django 5.2 |
CompositePrimaryKey O apoio é parcial. A comparação de tuplos com subconsultas requer o Django 5.2.4 ou posterior, e continuam a existir alguns casos limite de migração, além de JSONField. |
| Django 6.0 | Requer Python 3.12 ou posterior. Todas as limitações 5.2 aplicam-se. |
Versão 1.6
Data de lançamento: agosto de 2025
- Adicionei suporte para Django 5.1 e 5.2.
- Funcionalidade JSON melhorada e compatibilidade retroativa.
- Melhoria da infraestrutura do oleoduto.
Versão 1.5
Data de lançamento: abril de 2024
- Adicionado
supports_commentsum flag de funcionalidade paradb_comments. - Correções de erros para
AutoField, formatação de parâmetros e consultas de esquema.
(Versão 1.4)
Data de lançamento: janeiro de 2024
- Adicionei suporte ao Django 5.0.
- Adicionado suporte
db_comment. - Correções de bugs para conversões de data/hora e agregados vazios.
Versão 1.3
Data de lançamento: maio de 2023
- Adicionei suporte ao Django 4.2.
- Adicionado suporte a funções
Replaceque diferenciam maiúsculas de minúsculas. - Correções de erros no tratamento de
OFFSETe no preenchimento à esquerda.
Versão 1.2
Data de lançamento: dezembro de 2022
- Adicionei suporte ao Django 4.1.
- Adicionado suporte a fusos horários (datetimeoffset com
USE_TZ=True). - Adicionou-se a opção
return_rows_bulk_insertpara obtenção dos IDs de inserções em massa. - Adicionei suporte ao SQL Server 2022.
- Adicionado o
JSONFieldsuporte ao Azure SQL Managed Instance.
Versão 1.1
Data de lançamento: julho de 2022
- Suporte para Django 3.2 e 4.0.
- SQL Server 2016 e posteriores, e suporte ao Base de Dados SQL do Azure.
- conectividade baseada em
pyodbc.