Nieuw in mssql-django

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 zijn OPTIONS-dictionary. De driver behandelt verbindingen, verbindingspooling, herpogingen, transacties en savepoints, datetimeoffset-waarden, introspectie en Microsoft Entra-authenticatie. Aliassen die de optie weglaten, blijven worden gebruikt pyodbc, 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-python heeft geen extern geïnstalleerde Microsoft ODBC-driver nodig voor SQL Server. Aliassen die op pyodbc blijven, 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_Connection waarde in extra_params wordt behouden in plaats van overschreven te worden met de Windows-standaardinstelling, en de match negeert hoofdval. De instelling MARS_Connection=no werkt 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, zoals contains en startswith, 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 naar localhost in plaats van dat de validatie mislukt bij een lege SERVER=-waarde. Dit gedrag komt overeen met de pyodbc standaard voor lokale instanties.

Improvements

  • Pytz vervangen door Zoneinfo en tzData: Time zone handling gebruikt de standaard bibliotheekmodulezoneinfo, waarbij het tzdata pakket 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. pytz is 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-django release 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-python 1.15.0 of later is een vereiste afhankelijkheid, zelfs wanneer een alias gebruikt pyodbc. Installatie is beperkt tot platforms met een compatibele mssql-python distributie, 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.1 naar django>=3.2,<6.2.
  • Query compiler gebruikt quote_name op Django 6.1: Django 6.1 verouderd quote_name_unless_alias. De backend roept nu SQLCompiler.quote_name aan in Django 6.1 en latere versies, afhankelijk van de versie, zodat eerdere Django-versies ongewijzigd blijven. Queries met slicing en offset, zoals qs[a:b] en OFFSET ... 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 keys NO ACTION overeenkomstig in kaart, zodat inspectdb en 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-systeemcontrole fields.E324verhoogd , die je naar het standaard Django-niveau on_deletewijst.
  • Bitwise aggregates (BitAnd, BitOr, ): BitXorSQL Server heeft geen native bitwise aggregatefunctie, en de backend emuleert ze niet, dus deze aggregaten verhogen NotSupportedError.

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

  • IndexError voor GROUP BY-query's met geëscapede %% en werkelijke parameters: Voorheen ging elke query met een GROUP 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 tot IndexError: Replacement index N out of range leidde wanneer een query een %%-escape combineerde met een echte %s parameter. 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 zoals LIKE '%abc%' in een query zonder parameters werd herschreven naar LIKE '{}%' en de onjuiste rijen retourneerde.
  • NotImplementedError voor IntegerChoices in ruwe GROUP BY-query's: Voorheen leidde het doorgeven van een IntegerChoices-waarde aan een ruwe query die een GROUP BY-clausule bevatte tot NotImplementedError: Not supported type <enum ...>. De hulpfunctie voor parametertypering gebruikte exacte typecontroles (typ == int), en type(IntegerChoices_value) is de enum-klasse in plaats van int, dus de waarde kwam daardoor toch bij de raise terecht, ook al is deze een subklasse van int. Typecontroles gebruiken nu isinstance, en de tak bool wordt vóór de tak int geëvalueerd (omdat bool zelf een subklasse van int is). Enum-keuzes binden nu correct, bool binden BITnog steeds, en gewoon int blijft ongewijzigd.

Versie 1.7.3

Releasedatum: juni 2026

Versie 1.7.3 is een achterwaarts compatibele patchrelease met twee verbindings- en runtimeoplossingen.

Fouten opgelost

  • FA001 voor Authentication= andere modi dan ActiveDirectoryMsi: Voorheen heeft de back-end alleen overgeslagen Trusted_Connection=yes voor ActiveDirectoryMsi. Andere Entra-modi die geen USER-waarde leveren (bijvoorbeeld ActiveDirectoryIntegrated, ActiveDirectoryDefault of ActiveDirectoryDeviceFlow) ontvingen nog steeds Trusted_Connection=yes, die door het ODBC-stuurprogramma werd geweigerd met FA001 (Cannot use Authentication option with Integrated Security option). De oplossing detecteert elke expliciete waarde Authentication= met een hoofdletterongevoelige overeenkomst die rekening houdt met woordgrenzen, en slaat zowel Trusted_Connection als Integrated Security=SSPI over. Wachtwoordafhandeling is ongewijzigd: SqlPassword, ActiveDirectoryPassworden ActiveDirectoryServicePrincipal blijven verzenden PWD, terwijl ActiveDirectoryInteractive deze blijft weglaten.
  • KeyError op gesubclasseerde DatabaseWrapper: De in de cache opgeslagen eigenschappen sql_server_version en to_azure_sql_db waren gebaseerd op introspectie van type(self).__dict__ van cached_property, wat de eerste keer dat een subklasse van KeyError ze benaderde, DatabaseWrapper veroorzaakte (een regressie die in 1.7.1 is geïntroduceerd). De oplossing maakt gebruik van expliciete dictionaries op klasseniveau (_known_versions, _known_azures), die via self. 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 met AttributeError op Django 4.0 en later. De backend volgt nu explain-velden die bij de versie passen en genereert NotSupportedError correct 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 voor Now() 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

  • FieldDoesNotExist bij het wijzigen van velden met aflopende indexvolgorde: Opgelost _alter_field() in schema.py om index.fields_orders te gebruiken in plaats van index.fields bij het omzetten van indexveldnamen. De vorige code gaf ruwe veld-met-sortering-tekenreeksen (bijvoorbeeld "-pub_date") door aan model._meta.get_field(), wat leidde tot FieldDoesNotExist. 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, waardoor to_azure_sql_dbFalse retourneerde en feature-gatecontroles faalden. De oplossing voegt EDITION_AZURE_SQL_FABRIC=12 toe aan _AZURE_EDITIONS en 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 CompositePrimaryKey ondersteuning: De back-end voegt gedeeltelijke ondersteuning toe voor Django 5.2 CompositePrimaryKey. Voor tuple-vergelijkingen met subquery's is Django 5.2.4 of nieuwer vereist, en er blijven enkele randgevallen met samengestelde sleutels en JSONField bestaan. 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_comments toegevoegd voor db_comments.
  • Bugfixes voor AutoField, parameteropmaak en schemaquery’s.

Versie 1.4

Releasedatum: januari 2024

  • Django 5.0-ondersteuning toegevoegd.
  • Er is db_comment ondersteuning 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 Replace functies.
  • Bugfixes voor de verwerking van OFFSET en 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_insert toegevoegd voor het ophalen van ID’s bij bulk-insert.
  • Er is SQL Server 2022-ondersteuning toegevoegd.
  • Er is JSONField ondersteuning 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.