Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel worden nieuwe functies, verbeteringen en wijzigingen in elke versie van de mssql-django Django-databaseback-end beschreven.
Versie 2.0
Releasedatum: september 2026
Versie 2.0 voegt Microsoft's mssql-python driver toe als alternatief per pyodbcdatabase, verplaatst de ondersteunde Python-, Django- en SQL Server-matrix naar voren, en levert compatibiliteits- en betrouwbaarheidsfixes.
pyodbc blijft de standaarddriver.
Hoogtepunten
-
ondersteuning voor het mssql-python-stuurprogramma: Een databasealias schakelt dit in met
"python_driver": "mssql_python"in zijnOPTIONS-dictionary. De driver behandelt verbindingen, verbindingspooling, herpogingen, transacties en savepoints, datetimeoffset-waarden, introspectie en Microsoft Entra-authenticatie. Aliassen die de optie weglaten, blijven worden gebruiktpyodbc, dus er verandert niets totdat je je aanmeldt. Voor meer informatie, zie Selecteer de databasedriver voor mssql-django. -
Geen aparte ODBC-driverinstallatie op het mssql-python-pad: Een alias aan
mssql-pythonheeft geen extern geïnstalleerde Microsoft ODBC-driver nodig voor SQL Server. Aliassen die oppyodbcblijven, doen dat nog steeds. - Gemoderniseerde ondersteuningsmatrix: Python 3.10 tot en met 3.14, Django 5.2 tot en met 6.1, en SQL Server 2017 tot en met 2025. Django 6.0 en latere versies vereisen Python 3.12 of hoger.
Fouten opgelost
-
Expliciete MARS-instellingen worden gerespecteerd: Een expliciete
MARS_Connectionwaarde inextra_paramswordt behouden in plaats van overschreven te worden met de Windows-standaardinstelling, en de match negeert hoofdval. De instellingMARS_Connection=nowerkt nu ook met eindpunten die MARS afwijzen, waaronder Microsoft Fabric Warehouse. Met MARS uitgeschakeld, buffert de ORM-iteratie de resultaten voordat ze worden geleverd, zodat een geneste query de verbinding kan hergebruiken, wat meer geheugen kost bij grote querysets. Deze verbindingsoplossing voegt geen volledige Warehouse-ondersteuning toe voor migraties of andere SQL Server-functies. -
Jokertekens tussen rechte haken worden geëscapet in expressieopzoekingen: Patroonopzoekingen die twee velden vergelijken met een
F()-expressie, zoalscontainsenstartswith, escapen het SQL Server-jokerteken[. Haaktekens worden als data gematcht in plaats van als wildcard-syntaxis. -
Aanhalingstekens worden geëscapet in inspectdb-schemanamen: Een enkel aanhalingsteken in de
inspectdb --schema-waarde wordt geëscapet in de metagegevensquery, zodat schemanamen die een aanhalingsteken bevatten niet langer ongeldige Transact-SQL (T-SQL) genereren. -
Een lege HOST maakt verbinding met localhost op het mssql-python-pad: Een ontbrekende
HOST, die Django invult als een lege tekenreeks, verwijst naarlocalhostin plaats van dat de validatie mislukt bij een legeSERVER=-waarde. Dit gedrag komt overeen met depyodbcstandaard voor lokale instanties.
Improvements
-
Pytz vervangen door Zoneinfo en tzData: Time zone handling gebruikt de standaard bibliotheekmodule
zoneinfo, waarbij hettzdatapakket de IANA time zone-database levert in omgevingen die er geen leveren, zoals Windows en minimale containerimages. Offsets blijven het hele jaar door correct voor tijdzones met negatieve verschuivingen voor zomertijd.pytzis geen afhankelijkheid meer. -
Nieuwere SQL Server-versies worden geaccepteerd: een SQL Server-hoofdversie die de backend niet herkent, gebruikt de nieuwste capaciteitsset die de backend kent in plaats van te falen bij versievalidatie. Je kunt verbinding maken met een nieuwe SQL Server-release voordat een bijpassende
mssql-djangorelease wordt verzonden. Het accepteren van de verbinding verklaart niet dat ongeteste functies als ondersteund worden verklaard.
Brekende wijzigingen
- Python 3.8 en 3.9, en Django 3.2 tot en met 5.1, worden niet langer ondersteund. De compatibiliteitscode voor eerdere versies blijft van kracht, maar die combinaties worden niet getest of vermeld.
-
mssql-python1.15.0 of later is een vereiste afhankelijkheid, zelfs wanneer een alias gebruiktpyodbc. Installatie is beperkt tot platforms met een compatibelemssql-pythondistributie, wat SUSE Linux op ARM64 uitsluit. Projecten op andere platforms blijven op versie 1.8.0. - Verklaarde ondersteuning voor SQL Server begint met SQL Server 2017, en declareerde native connectiviteitsondersteuning is beperkt tot Microsoft ODBC Driver 17 en Microsoft ODBC Driver 18.
Versie 1.8.0
Releasedatum: augustus 2026
Versie 1.8.0 voegt ondersteuning toe voor Django 6.1, terwijl Django 3.2 tot en met 6.0 wordt ondersteund. Het verplaatsen van een project van Django 6.0 naar 6.1 vereist geen codewijzigingen, tenzij je een van de twee Django 6.1-functies gebruikt die in deze sectie worden beschreven.
Hoogtepunten
-
Ondersteuning voor Django 6.1: Gevalideerd voor Django 6.1, met behoud van ondersteuning voor Django 3.2 tot en met 6.0. De afhankelijkheidsbeperking wordt groter van
django>=3.2,<6.1naardjango>=3.2,<6.2. -
Query compiler gebruikt
quote_nameop Django 6.1: Django 6.1 verouderdquote_name_unless_alias. De backend roept nuSQLCompiler.quote_nameaan in Django 6.1 en latere versies, afhankelijk van de versie, zodat eerdere Django-versies ongewijzigd blijven. Queries met slicing en offset, zoalsqs[a:b]enOFFSET ... FETCH, kunnen worden gecompileerd zonder verouderingswaarschuwingen. -
Introspectie voor vreemde sleutels geeft de ON-regel DELETE terug: Django 6.1 is uitgebreid
get_relations()om de database-niveau ON-regel DELETE op te nemen. De back-end retourneert de verwachte driedelige structuur en brengt SQL Server-foreign keysNO ACTIONovereenkomstig in kaart, zodatinspectdben foreign-key-introspectie correcte modellen opleveren.
Django 6.1-functies die niet worden ondersteund
Twee Django 6.1-toevoegingen zijn om verschillende redenen niet beschikbaar op deze backend:
-
Referentieacties op databaseniveau (
DB_CASCADE,DB_SET_NULL, ):DB_SET_DEFAULTSQL Server weigert vreemde sleutelgrafieken met meerdere cascadepaden naar dezelfde tabel (fout 1785), dus er is geen native pad voor deze functie op een SQL Server-versie. Door een van deze waarden te gebruiken, wordt de Django-systeemcontrolefields.E324verhoogd , die je naar het standaard Django-niveauon_deletewijst. -
Bitwise aggregates (
BitAnd,BitOr, ):BitXorSQL Server heeft geen native bitwise aggregatefunctie, en de backend emuleert ze niet, dus deze aggregaten verhogenNotSupportedError.
Zie Beperkingen en niet-ondersteunde functies in mssql-django voor meer informatie.
Versie 1.7.4
Releasedatum: juli 2026
Versie 1.7.4 is een achterwaarts compatibele patchrelease met twee fixes voor ruwe en geannoteerde GROUP BY queryafhandeling.
Fouten opgelost
-
IndexErrorvoorGROUP BY-query's met geëscapede%%en werkelijke parameters: Voorheen ging elke query met eenGROUP BY-clausule door een stap voor het herschrijven van tijdelijke aanduidingen, waarbij%\w+werd gezocht en vervangen door{}. Die regex matchte ook geëscapede%%literals, waardoor fantoom-placeholders werden ingevoegd en dit totIndexError: Replacement index N out of rangeleidde wanneer een query een%%-escape combineerde met een echte%sparameter. De vernauwde regex is nu alleen nog van toepassing op%%(letterlijk behouden) en%s(de echte placeholder), en dat is het enige patroon dat de compiler ooit genereert. Dezelfde correctie voorkomt ook een niet-gerelateerde stille bug waarbij een niet-geëscapet patroon zoalsLIKE '%abc%'in een query zonder parameters werd herschreven naarLIKE '{}%'en de onjuiste rijen retourneerde. -
NotImplementedErrorvoorIntegerChoicesin ruweGROUP BY-query's: Voorheen leidde het doorgeven van eenIntegerChoices-waarde aan een ruwe query die eenGROUP BY-clausule bevatte totNotImplementedError: Not supported type <enum ...>. De hulpfunctie voor parametertypering gebruikte exacte typecontroles (typ == int), entype(IntegerChoices_value)is de enum-klasse in plaats vanint, dus de waarde kwam daardoor toch bij de raise terecht, ook al is deze een subklasse vanint. Typecontroles gebruiken nuisinstance, en de takboolwordt vóór de takintgeëvalueerd (omdatboolzelf een subklasse vanintis). Enum-keuzes binden nu correct,boolbindenBITnog steeds, en gewoonintblijft ongewijzigd.
Versie 1.7.3
Releasedatum: juni 2026
Versie 1.7.3 is een achterwaarts compatibele patchrelease met twee verbindings- en runtimeoplossingen.
Fouten opgelost
-
FA001voorAuthentication=andere modi danActiveDirectoryMsi: Voorheen heeft de back-end alleen overgeslagenTrusted_Connection=yesvoorActiveDirectoryMsi. Andere Entra-modi die geenUSER-waarde leveren (bijvoorbeeldActiveDirectoryIntegrated,ActiveDirectoryDefaultofActiveDirectoryDeviceFlow) ontvingen nog steedsTrusted_Connection=yes, die door het ODBC-stuurprogramma werd geweigerd metFA001(Cannot use Authentication option with Integrated Security option). De oplossing detecteert elke expliciete waardeAuthentication=met een hoofdletterongevoelige overeenkomst die rekening houdt met woordgrenzen, en slaat zowelTrusted_ConnectionalsIntegrated Security=SSPIover. Wachtwoordafhandeling is ongewijzigd:SqlPassword,ActiveDirectoryPasswordenActiveDirectoryServicePrincipalblijven verzendenPWD, terwijlActiveDirectoryInteractivedeze blijft weglaten. -
KeyErrorop gesubclasseerdeDatabaseWrapper: De in de cache opgeslagen eigenschappensql_server_versionento_azure_sql_dbwaren gebaseerd op introspectie vantype(self).__dict__vancached_property, wat de eerste keer dat een subklasse vanKeyErrorze benaderde,DatabaseWrapperveroorzaakte (een regressie die in 1.7.1 is geïntroduceerd). De oplossing maakt gebruik van expliciete dictionaries op klasseniveau (_known_versions,_known_azures), die viaself.worden benaderd, zodat de naamopzoeking via de MRO wordt opgelost en wrappers in subklassen correct werken.
Versie 1.7.2
Releasedatum: mei 2026
Versie 1.7.2 is een achterwaarts compatibele patchrelease met tijdzone- en compatibiliteitsoplossingen.
Fouten opgelost
-
.explain()compatibiliteit voor Django 4.0 en later: Compilerverwerking van Django's EXPLAIN-metadata gecorrigeerd, zodat.explain()niet langer mislukt metAttributeErrorop Django 4.0 en later. De backend volgt nu explain-velden die bij de versie passen en genereertNotSupportedErrorcorrect wanneer dat nodig is. - verwerking van datetimeoffset-tijdzones: Opgelost: het parseren van datetimeoffset is gecorrigeerd, zodat tijdzone-offsets behouden blijven in plaats van te worden verwijderd. Geretourneerde datum- en tijdwaarden bevatten nu tijdzone-informatie indien verwacht.
-
Now()metUSE_TZ=True: Bijgewerkte SQL-generatie voorNow()het gebruik van tijdzonebewust gedrag wanneer tijdzoneondersteuning is ingeschakeld, waardoor tijdstempeldrift op niet-UTC-SQL Server hosts wordt voorkomen.
Versie 1.7.1
Releasedatum: april 2026
Versie 1.7.1 is een achterwaarts compatibele patchrelease met bugfixes.
Fouten opgelost
-
FieldDoesNotExistbij het wijzigen van velden met aflopende indexvolgorde: Opgelost_alter_field()inschema.pyomindex.fields_orderste gebruiken in plaats vanindex.fieldsbij het omzetten van indexveldnamen. De vorige code gaf ruwe veld-met-sortering-tekenreeksen (bijvoorbeeld"-pub_date") door aanmodel._meta.get_field(), wat leidde totFieldDoesNotExist. Nu wordt alleen de veldnaam geëxtraheerd en wordt het achtervoegsel voor de sortering correct weggelaten. -
Ondersteuning voor SQL-database in Microsoft Fabric (EngineEdition 12): SQL-database in Fabric (
EngineEdition=12) wordt herkend als een Azure-versie. Voorheen werd de engineversie van Fabric niet herkend, waardoorto_azure_sql_dbFalseretourneerde en feature-gatecontroles faalden. De oplossing voegtEDITION_AZURE_SQL_FABRIC=12toe aan_AZURE_EDITIONSen wijst Fabric toe aan de meest recente ondersteunde SQL Server versie.JSONField, hashfuncties, collatie-inspectie en afbouw van testdatabases werken nu naar behoren op Fabric.
Versie 1.7
Releasedatum: maart 2026
Hoogtepunten
- Django 6.0-ondersteuning: Volledige compatibiliteit met Django 6.0, waarvoor Python 3.12 of hoger is vereist. Alle 6.0 API-wijzigingen worden transparant verwerkt door de back-end.
-
Gedeeltelijke
CompositePrimaryKeyondersteuning: De back-end voegt gedeeltelijke ondersteuning toe voor Django 5.2CompositePrimaryKey. Voor tuple-vergelijkingen met subquery's is Django 5.2.4 of nieuwer vereist, en er blijven enkele randgevallen met samengestelde sleutels enJSONFieldbestaan. Django 5.2 zelf werd voor het eerst ondersteund in mssql-django 1.6. - SQL Server 2025-ondersteuning: gevalideerd op basis van SQL Server 2025.
- ODBC-stuurprogramma 18 standaard: de back-end is nu standaard ingesteld op ODBC-stuurprogramma 18 voor SQL Server, met automatische terugval naar ODBC-stuurprogramma 17 als versie 18 niet is geïnstalleerd.
Versiespecifieke opmerkingen
| Django-versie | Aantekeningen |
|---|---|
| Django 5.1 |
inspectdb kan tabellen met samengestelde primaire sleutels inspecteren, maar er worden geen volledige modeldefinities voor deze tabellen gegenereerd. |
| Django 5.2 |
CompositePrimaryKey ondersteuning is gedeeltelijk. Voor vergelijking van tuples met subquery’s is Django 5.2.4 of nieuwer vereist, en er blijven nog enkele migratie- en JSONField randgevallen over. |
| Django 6.0 | Vereist Python 3.12 of hoger. Alle beperkingen van 5.2 zijn van toepassing. |
Versie 1.6
Releasedatum: augustus 2025
- Django 5.1- en 5.2-ondersteuning toegevoegd.
- Verbeterde JSON-functionaliteit en compatibiliteit met eerdere versies.
- Verbeterde pijplijninfrastructuur.
Versie 1.5
Releasedatum: april 2024
- Functievlag
supports_commentstoegevoegd voordb_comments. - Bugfixes voor
AutoField, parameteropmaak en schemaquery’s.
Versie 1.4
Releasedatum: januari 2024
- Django 5.0-ondersteuning toegevoegd.
- Er is
db_commentondersteuning toegevoegd. - Opgeloste fouten voor datum-/tijdconversies en lege aggregaties.
Versie 1.3
Releasedatum: mei 2023
- Django 4.2-ondersteuning toegevoegd.
- Er is ondersteuning toegevoegd voor hoofdlettergevoelige
Replacefuncties. - Bugfixes voor de verwerking van
OFFSETen linkeropvulling.
Versie 1.2
Releasedatum: december 2022
- Django 4.1-ondersteuning toegevoegd.
- Ondersteuning voor tijdzone toegevoegd (datetimeoffset met
USE_TZ=True). - Optie
return_rows_bulk_inserttoegevoegd voor het ophalen van ID’s bij bulk-insert. - Er is SQL Server 2022-ondersteuning toegevoegd.
- Er is
JSONFieldondersteuning toegevoegd voor Azure SQL Managed Instance.
Versie 1.1
Releasedatum: juli 2022
- Ondersteuning voor Django 3.2 en 4.0.
- SQL Server 2016 en hoger en Azure SQL Database ondersteuning.
-
pyodbc-gebaseerde connectiviteit.