Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive nuove funzionalità, miglioramenti e modifiche in ogni versione del back-end del mssql-django database Django.
Versione: 2.0
Data di uscita: settembre 2026
La versione 2.0 aggiunge il driver di mssql-python Microsoft come alternativa per database a pyodbc, sposta in avanti la matrice supportata di Python, Django e SQL Server, e fornisce correzioni di compatibilità e affidabilità.
pyodbc rimane il driver predefinito.
Elementi di rilievo
-
Supporto driver mssql-python: Un alias di database accede
"python_driver": "mssql_python"nel suoOPTIONSdizionario. Il driver copre connessioni, pool di connessioni, tentazioni, transazioni e punti di salvataggio, valori datetimeoffset, introspezione e autenticazione Microsoft Entra. Gli alias che omettono l'opzione continuano a usarepyodbc, quindi nulla cambia finché non accedi. Per ulteriori informazioni, vedi Seleziona il driver del database per mssql-django. -
Nessuna installazione separata di driver ODBC sul percorso mssql-python: Un alias attivo
mssql-pythonnon richiede un driver Microsoft ODBC installato esternamente per SQL Server. Gli alias che restano attivipyodbclo fanno. - Matrice di supporto modernizzata: Python 3.10 fino a 3.14, Django 5.2 fino a 6.1 e SQL Server dal 2017 al 2025. Django 6.0 e versioni successive richiedono Python 3.12 o successive.
Correzioni di bug
-
Le impostazioni esplicite di MARS sono rispettate: un valore esplicito
MARS_Connectioninextra_paramsviene preservato invece di essere sovrascritto con il valore predefinito di Windows, e la corrispondenza ignora la maiuscolia. Ora l'impostazioneMARS_Connection=nofunziona contro endpoint che rifiutano MARS, incluso Microsoft Fabric Warehouse. Con MARS disabilitato, l'iterazione ORM buffela i risultati prima di fornirli, così che una query annidata possa riutilizzare la connessione, il che richiede più memoria su query di grandi dimensioni. Questa correzione di connessione non aggiunge il supporto completo del Warehouse per migrazioni o altre funzionalità di SQL Server. -
I jolly a bracket vengono sfuggiti nelle ricerche di espressione: le ricerche di pattern che confrontano due campi con un'espressione
F(), comecontainsestartswith, sfuggono al wildcard di SQL Server[. I caratteri a cornice sono abbinati come dati invece che come sintassi jolly. -
Le citazioni vengono sfuggite nei nomi degli schemi inspectdb: una singola citazione nel
inspectdb --schemavalore viene sfuggita nella query dei metadati, quindi i nomi degli schemi che contengono una citazione non producono più Transact-SQL malformati (T-SQL). -
Un HOST vuoto si collega a localhost sul percorso mssql-python: un , omesso
HOSTe che Django riempie come stringa vuota, si risolve inlocalhostinvece di fallire la validazione con un valore vuotoSERVER=. Questo comportamento corrisponde alpyodbcpredefinito per le istanze locali.
Improvements
-
Pytz sostituito da ZoneInfo e TZDATA: la gestione dei fusi orari utilizza il modulo standard della libreria
zoneinfo, con iltzdatapacchetto che fornisce il database del fuso orario IANA in ambienti che non ne inviano uno, come Windows e immagini container minime. Gli offset rimangono corretti per tutto l'anno per le zone con compensazioni negative nell'ora legale.pytznon è più una dipendenza. -
Vengono accettate versioni più recenti di SQL Server: una versione maggiore di SQL Server che il backend non riconosce utilizza l'ultimo set di funzionalità che il backend conosce invece di fallire la validazione della versione. Puoi collegarti a una nuova versione di SQL Server prima che venga rilasciata una versione corrispondente
mssql-django. Accettare la connessione non dichiara che le funzionalità non testate sono supportate.
Modifiche radicali
- Python 3.8 e 3.9, e Django 3.2 fino a 5.1, non sono più supportati. Il codice di compatibilità delle versioni precedenti rimane in regola, ma quelle combinazioni non vengono testate né elencate.
-
mssql-python1.15.0 o successive sono una dipendenza obbligatoria anche quando un alias utilizzapyodbc. L'installazione è limitata alle piattaforme che hanno una distribuzione compatibilemssql-python, escludendo SUSE Linux su ARM64. I progetti su altre piattaforme rimangono sulla versione 1.8.0. - Il supporto dichiarato per SQL Server inizia con SQL Server 2017, e il supporto per la connettività dichiarata nativa è limitato al driver ODBC 17 di Microsoft e al driver 18 di ODBC di Microsoft.
Versione 1.8.0
Data di uscita: agosto 2026
La versione 1.8.0 aggiunge il supporto per Django 6.1 continuando però a supportare Django dalla 3.2 alla 6.0. Spostare un progetto da Django 6.0 a 6.1 non richiede modifiche al codice a meno che non si utilizzi una delle due funzionalità di Django 6.1 descritte in questa sezione.
Elementi di rilievo
-
Supporto Django 6.1: Validato contro Django 6.1 pur continuando a supportare Django 3.2 fino a 6.0. Il vincolo di dipendenza si allarga da
django>=3.2,<6.1adjango>=3.2,<6.2. -
Il compilatore di query utilizza
quote_namesu Django 6.1: Django 6.1 ha deprecatoquote_name_unless_alias. Il backend ora chiamaSQLCompiler.quote_namein Django 6.1 e nelle versioni successive, in base alla versione, così le versioni precedenti di Django non subiscono modifiche. Le query con slicing e offset, comeqs[a:b]eOFFSET ... FETCH, vengono compilate senza avvisi di deprecazione. -
L'introspezione della chiave esterna restituisce la regola ON DELETE: Django 6.1 ha ampliato
get_relations()per includere la regola ON DELETE a livello del database. Il backend restituisce la forma attesa in tre parti e mappa di conseguenza le chiavi esterne di SQL ServerNO ACTION, cosìinspectdbe l'introspezione delle chiavi esterne producono modelli corretti.
Funzionalità di Django 6.1 che non sono supportate
Due aggiunte di Django 6.1 non sono disponibili in questo backend, per motivi diversi:
-
Azioni referenziali a livello di database (
DB_CASCADE,DB_SET_NULL,DB_SET_DEFAULT): SQL Server rifiuta i grafi a chiave esterna con più percorsi a cascata verso la stessa tabella (errore 1785), quindi non esiste un percorso nativo per questa funzione su nessuna versione di SQL Server. L'uso di uno di questi valori attiva il controllo di sistema di Djangofields.E324, che rimanda alon_deletestandard a livello di Django. -
Aggregati bit a bit (
BitAnd,BitOr,BitXor): SQL Server non ha una funzione di aggregazione bit a bit nativa e il backend non li emula, quindi questi aggregati generanoNotSupportedError.
Per altre informazioni, vedere Limitazioni e funzionalità non supportate in mssql-django.
Versione 1.7.4
Data di uscita: luglio 2026
La versione 1.7.4 è una patch retrocompatibile con due correzioni per la gestione delle query grezze e annotate GROUP BY .
Correzioni di bug
-
IndexErrornelle queryGROUP BYcon%%con caratteri di escape e parametri reali: In precedenza, qualsiasi query con una clausolaGROUP BYveniva sottoposta a una fase di riscrittura dei segnaposto che individuava%\w+e lo sostituiva con{}. Quel regex corrispondeva anche a letterali%%sfuggiti, che iniettavano segnaposto fantasma e si alzavanoIndexError: Replacement index N out of rangeogni volta che una query combinava un%%-escape con un parametro reale%s. Il regex ristretto ora tocca%%solo (conservato parola per parola) e%s(il vero segnaposto), che è l'unico pattern che il compilatore emette mai. La stessa correzione previene anche un bug silenzioso non correlato, per cui un pattern senza escape comeLIKE '%abc%'in una query senza parametri veniva riscritto comeLIKE '{}%'e restituiva righe errate. -
NotImplementedErrorperIntegerChoicesin queryGROUP BYgrezze: In precedenza, il passaggio di un valoreIntegerChoicesin una query grezza che conteneva una clausolaGROUP BYgeneravaNotImplementedError: Not supported type <enum ...>. L'aiutante per la tipizzazione dei parametri ha usato verifiche di tipo esatte (typ == int), etype(IntegerChoices_value)è la classe enum invece diint, quindi il valore è passato all'innalzamento anche se sottoclasseint. I controlli di tipo ora usanoisinstance, e ilboolbranch viene valutato prima delintbranch (perchéboolè esso stesso unaintsottoclasse). Le opzioni enum ora vengono associate correttamente,boolè ancora associato aBIT, e il sempliceintrimane invariato.
Versione 1.7.3
Data di rilascio: giugno 2026
La versione 1.7.3 è una versione patch compatibile con le versioni precedenti con due correzioni di connessione e runtime.
Correzioni di bug
-
FA001perAuthentication=modalità diverse daActiveDirectoryMsi: in precedenza, il back-end ignoravaTrusted_Connection=yessolo perActiveDirectoryMsi. Altre modalità Entra che non forniscono unUSERvalore ( ad esempio ,ActiveDirectoryIntegrated,ActiveDirectoryDefault,ActiveDirectoryDeviceFlow) hanno ancora ricevutoTrusted_Connection=yes, che il driver ODBC ha rifiutato conFA001(Cannot use Authentication option with Integrated Security option). La correzione rileva qualsiasi valore esplicitoAuthentication=con una corrispondenza con riconoscimento dei limiti, senza distinzione tra maiuscole e minuscole e ignora siaTrusted_ConnectioncheIntegrated Security=SSPI. La gestione delle password è invariata:SqlPassword,ActiveDirectoryPasswordeActiveDirectoryServicePrincipalcontinuano a inviarePWD, mentreActiveDirectoryInteractivecontinua a ometterla. -
KeyErrornelle sottoclassi diDatabaseWrapper: le proprietàsql_server_versioneto_azure_sql_dbmemorizzate nella cache si basavano sull'introspezionetype(self).__dict__dicached_property, che sollevavaKeyErrorla prima volta che una sottoclasse diDatabaseWrappertentava di accedervi (una regressione introdotta nella versione 1.7.1). La correzione usa dizionari espliciti a livello di classe (_known_versions,_known_azures), accessibili tramiteself., quindi la risoluzione della ricerca avviene tramite l’MRO e i wrapper sottoclassati funzionano correttamente.
Versione 1.7.2
Data di rilascio: maggio 2026
La versione 1.7.2 è una release correttiva retrocompatibile con correzioni relative al fuso orario e alla compatibilità.
Correzioni di bug
-
.explain()compatibilità per Django 4.0 e versioni successive: correzione della gestione del compilatore dei metadati di spiegazione di Django in modo che.explain()non riesca più conAttributeErrorin Django 4.0 e versioni successive. Il backend ora segue i campi `explain` appropriati alla versione e solleva correttamenteNotSupportedErrorquando necessario. - gestione del fuso orario di datetimeoffset: corretta l'analisi di datetimeoffset in modo che gli offset di fuso orario vengano mantenuti anziché eliminati. Le date e ore restituite ora includono il fuso orario quando previsto.
-
Now()conUSE_TZ=True: generazione SQL aggiornata perNow()per utilizzare un comportamento con riconoscimento del fuso orario quando il supporto del fuso orario è abilitato, evitando lo slittamento del timestamp sugli host SQL Server non UTC.
Versione 1.7.1
Data di rilascio: aprile 2026
La versione 1.7.1 è una versione di patch compatibile con le versioni precedenti con correzioni di bug.
Correzioni di bug
-
FieldDoesNotExistdurante la modifica dei campi con ordinamento decrescente dell'indice: corretto_alter_field()inschema.pyper utilizzareindex.fields_ordersal posto diindex.fieldsdurante la risoluzione dei nomi dei campi dell'indice. Il codice precedente passava stringhe raw di campo con ordinamento (ad esempio,"-pub_date") amodel._meta.get_field(), provocandoFieldDoesNotExist. Ora viene estratto solo il nome del campo e il suffisso di ordinamento viene rimosso correttamente. -
Supporto per il database SQL in Microsoft Fabric (EngineEdition 12): Riconoscimento del database SQL in Fabric (
EngineEdition=12) come edizione di Azure. In precedenza, l'edizione del motore di Fabric non veniva riconosciuta, causando la restituzione dito_azure_sql_dbda parte diFalsee il fallimento dei controlli del feature gate. La correzione aggiungeEDITION_AZURE_SQL_FABRIC=12a_AZURE_EDITIONSe associa Fabric all'ultima versione supportata di SQL Server.JSONField, le funzioni hash, l'introspezione delle regole di confronto e lo smantellamento del database di test ora funzionano correttamente su Fabric.
Versione 1.7
Data di rilascio: marzo 2026
Elementi di rilievo
- Supporto di Django 6.0: compatibilità completa con Django 6.0, che richiede Python 3.12 o versione successiva. Tutte le modifiche api 6.0 vengono gestite in modo trasparente dal back-end.
-
Supporto parziale
CompositePrimaryKey: il back-end aggiunge il supporto parziale per Django 5.2CompositePrimaryKey. Il confronto tra tuple e sottoquery richiede Django 5.2.4 o versioni successive e permangono alcuni casi limite relativi alle chiavi composite e aJSONField. Django 5.2 è stato supportato per la prima volta in mssql-django 1.6. - Supporto di SQL Server 2025: Convalidato con SQL Server 2025.
- ODBC Driver 18 predefinito: il back-end ora usa per impostazione predefinita ODBC Driver 18 per SQL Server, con passaggio automatico a ODBC Driver 17 se la versione 18 non è installata.
Note specifiche della versione
| Versione di Django | Note |
|---|---|
| Django 5.1 |
inspectdb può esaminare le tabelle con chiavi primarie composite, ma non genera definizioni di modello complete per loro. |
| Django 5.2 |
CompositePrimaryKey il supporto è parziale. Il confronto tra tuple e sottoquery richiede Django 5.2.4 o versione successiva e alcuni casi di migrazione più JSONField edge rimangono. |
| Django 6.0 | Richiede Python 3.12 o versione successiva. Si applicano tutte le limitazioni 5.2. |
Versione 1.6
Data di rilascio: agosto 2025
- Aggiunto il supporto per Django 5.1 e 5.2.
- Funzionalità JSON avanzate e compatibilità con le versioni precedenti.
- Infrastruttura della pipeline migliorata.
Versione 1.5
Data di rilascio: aprile 2024
- Aggiunto il flag di funzionalità
supports_commentsperdb_comments. - Correzioni di bug per
AutoField, formattazione dei parametri e query dello schema.
Versione 1.4
Data di rilascio: gennaio 2024
- Aggiunto il supporto per Django 5.0.
- Aggiunto supporto
db_comment - Correzioni di bug per conversioni di data/ora e aggregazioni vuote.
Versione 1.3
Data di rilascio: maggio 2023
- Aggiunto il supporto per Django 4.2.
- Aggiunto il supporto per le funzioni
Replacecon distinzione tra maiuscole e minuscole. - Correzioni di bug per la gestione di
OFFSETe il padding sinistro.
Versione 1.2
Data di rilascio: dicembre 2022
- Aggiunto il supporto per Django 4.1.
- Aggiunto il supporto per il fuso orario (datetimeoffset con
USE_TZ=True). - Aggiunta l'opzione
return_rows_bulk_insertper il recupero dell'ID dell'inserimento massivo. - Aggiunto il supporto per SQL Server 2022.
- Aggiunto il supporto
JSONFieldper Istanza gestita di SQL di Azure.
Versione 1.1
Data di rilascio: luglio 2022
- Supporto di Django 3.2 e 4.0.
- SQL Server 2016 e versioni successive e database SQL di Azure sono supportati.
- Connettività basata su
pyodbc.