Nyheter i mssql-django

Den här artikeln beskriver nya funktioner, förbättringar och ändringar i varje version av mssql-django Django-databasserverdelen.

Version 2.0

Releasedatum: september 2026

Version 2.0 lägger till Microsoft:s mssql-python drivrutin som ett per-databas-alternativ till pyodbc, flyttar den stödda matrisen för Python, Django och SQL Server framåt, och levererar kompatibilitets- och tillförlitlighetsfixar. pyodbc förblir standarddrivrutinen.

Höjdpunkter

  • stöd för drivrutinen mssql-python: Ett databasalias aktiveras med "python_driver": "mssql_python" i sin OPTIONS-ordbok. Drivrutinen täcker anslutningar, anslutningspooler, återförsök, transaktioner och sparpunkter, datetimeoffset-värden, introspektion och Microsoft Entra-autentisering. Alias som utelämnar alternativet fortsätter att användas pyodbc, så inget ändras förrän du väljer att gå med. För mer information, se Välj databasdrivrutinen för mssql-django.
  • Ingen separat ODBC-drivrutinsinstallation på mssql-python-vägen: Ett alias på mssql-python behöver inte en externt installerad Microsoft ODBC-drivrutin för SQL Server. Alias som finns kvar på pyodbc gör det fortfarande.
  • Moderniserad stödmatris: Python 3.10 till 3.14, Django 5.2 till 6.1 och SQL Server 2017 till 2025. Django 6.0 och senare versioner kräver Python 3.12 eller senare.

Felkorrigeringar

  • Explicita MARS-inställningar respekteras: Ett explicit MARS_Connection värde i extra_params bevaras istället för att skrivas över med Windows standard, och matchningen ignorerar kasus. Inställningen MARS_Connection=no fungerar nu med slutpunkter som avvisar MARS, inklusive Microsoft Fabric Warehouse. Med MARS avstängt buffrar ORM-iterationen resultaten innan de ger dem, så att en nästlad fråga kan återanvända anslutningen, vilket kostar mer minne på stora frågemängder. Denna anslutningslösning lägger inte till fullt lagerstöd för migreringar eller andra SQL Server-funktioner.
  • Jokertecken inom hakparenteser escapas i uttrycksuppslagningar: Mönsteruppslagningar som jämför två fält med ett F()-uttryck, till exempel contains och startswith, escaper SQL Server-jokertecknet [. Parentestecken matchas som data istället för som wildcard-syntax.
  • Citattecken undviks i inspectdb-schemanamn: Ett enda citat i inspectdb --schema värdet undviks i metadatafrågan, så schemanamn som innehåller ett citat producerar inte längre felaktigt Transact-SQL (T-SQL).
  • En tom HOST ansluter till localhost via mssql-python-vägen: En utelämnad HOST, som Django fyller i som en tom sträng, löser sig till localhost istället för att misslyckas med validering med ett tomt SERVER= värde. Detta beteende stämmer överens med standarden pyodbc för lokala instanser.

Improvements

  • Pytz ersatte med Zoneinfo och TzData: Tidszonshantering använder standardbiblioteksmodulenzoneinfo, där paketet tzdata tillhandahåller IANA-tidszonsdatabasen i miljöer som inte levererar en, såsom Windows och minimala containerbilder. Förskjutningarna förblir korrekta hela året för zoner med negativ sommartidsförskjutning. pytz är inte längre ett beroende.
  • Nyare SQL Server-versioner accepteras: En SQL Server-huvudversion som backend inte känner igen använder den senaste kapacitetsuppsättningen som backend känner till istället för att misslyckas med versionsvalidering. Du kan ansluta till en ny SQL Server-release innan en matchande mssql-django release släpps. Att acceptera anslutningen deklarerar inte otestade funktioner som stödda.

Brytande förändringar

  • Python 3.8 och 3.9, samt Django 3.2 till 5.1, stöds inte längre. Kompatibilitetskoden för tidigare versioner finns kvar, men dessa kombinationer är inte testade eller listade.
  • mssql-python 1.15.0 eller senare är ett nödvändigt beroende även när ett alias använder pyodbc. Installationen är begränsad till plattformar som har en kompatibel mssql-python distribution, vilket exkluderar SUSE Linux på ARM64. Projekt på andra plattformar förblir på version 1.8.0.
  • Deklarerat SQL Server-stöd börjar med SQL Server 2017, och deklarerat inbyggt anslutningsstöd är begränsat till Microsoft ODBC Driver 17 och Microsoft ODBC Driver 18.

Version 1.8.0

Releasedatum: augusti 2026

Version 1.8.0 lägger till stöd för Django 6.1 samtidigt som den fortsätter att stödja Django 3.2 till 6.0. Att flytta ett projekt från Django 6.0 till 6.1 kräver inga kodändringar om du inte använder någon av de två Django 6.1-funktionerna som beskrivs i detta avsnitt.

Höjdpunkter

  • Django 6.1-stöd: Validerat mot Django 6.1 samtidigt som det fortsätter att stödja Django 3.2 till 6.0. Beroendebegränsningen vidgas från django>=3.2,<6.1 till django>=3.2,<6.2.
  • Frågekompilatorn använder quote_name på Django 6.1: Django 6.1 föråldrad quote_name_unless_alias. Backenden anropar nu SQLCompiler.quote_name i Django 6.1 och senare versioner, styrt av version så att tidigare versioner av Django inte påverkas. Slice- och offset-frågor, till exempel qs[a:b] och OFFSET ... FETCH, kompileras utan utfasningsvarningar.
  • Introspektion av främmande nycklar returnerar regeln ON DELETE: I Django 6.1 utökades get_relations() till att inkludera regeln ON DELETE på databasnivå. Backenden returnerar den förväntade tredelade strukturen och mappar främmande nycklar i SQL Server på motsvarande sätt, så inspectdb och introspektion av främmande nycklar ger korrekta modeller.

Django 6.1-funktioner som inte stöds

Två Django 6.1-tillägg är inte tillgängliga på denna backend, av olika skäl:

  • Referensåtgärder på databasnivå (DB_CASCADE, DB_SET_NULL, ): DB_SET_DEFAULTSQL Server avvisar främmande nyckelgrafer med flera kaskadvägar till samma tabell (fel 1785), så det finns ingen inbyggd sökväg för denna funktion i någon SQL Server-version. Med ett av dessa värden höjs Django-systemkontrollen fields.E324, som pekar dig till standard Django-nivå on_delete.
  • Bitvisa aggregat (BitAnd, BitOr, ): BitXorSQL Server har ingen inbyggd bitvis aggregatfunktion, och backend emulerar dem inte, så dessa aggregat höjer NotSupportedError.

Mer information finns i Begränsningar och funktioner som inte stöds i mssql-django.

Version 1.7.4

Releasedatum: juli 2026

Version 1.7.4 är en bakåtkompatibel patchutgåva med två fixar för rå och annoterad GROUP BY frågehantering.

Felkorrigeringar

  • IndexError om GROUP BY frågor med escaped %% och realparametrar: Tidigare gick varje fråga med en GROUP BY klausul igenom ett platshållaromskrivningssteg som matchade %\w+ och ersatte den med {}. Det reguljära uttrycket matchade också escapade %%-literaler, vilket infogade falska platshållare och utlöste IndexError: Replacement index N out of range när en fråga kombinerade en %%-escape med en riktig %s-parameter. Det snävare regexet påverkar nu bara %% (bevaras ordagrant) och %s (den faktiska platshållaren), vilket är det enda mönster som kompilatorn någonsin genererar. Samma fix förhindrar också en orelaterad tyst bugg där ett oescaped mönster, som LIKE '%abc%' i en no-param-fråga, skrevs om till LIKE '{}%' och returnerade fel rader.
  • NotImplementedError för IntegerChoices i råa GROUP BY-frågor: Tidigare utlöste det IntegerChoices att skicka ett GROUP BY-värde till en rå GROUP BY-fråga som innehöll en -klausul. Hjälpfunktionen för parametertyper använde exakta typkontroller (typ == int), och type(IntegerChoices_value) är uppräkningsklassen snarare än int, så värdet hamnade därför i raise-satsen trots att det är en underklass till int. Typkontroller använder isinstancenu , och förgreningen bool utvärderas före förgreningen int (eftersom bool den själv är en int underklass). Enum-val binder nu korrekt, bool binder BITfortfarande, och plain int är oförändrad.

Version 1.7.3

Utgivningsdatum: juni 2026

Version 1.7.3 är en bakåtkompatibel korrigeringsversion med två anslutnings- och körningskorrigeringar.

Felkorrigeringar

  • FA001 för Authentication= andra lägen än ActiveDirectoryMsi: Tidigare hoppades serverdelen bara över Trusted_Connection=yes för ActiveDirectoryMsi. Andra Entra-lägen som inte tillhandahåller något USER-värde (till exempel ActiveDirectoryIntegrated, ActiveDirectoryDefault, ActiveDirectoryDeviceFlow) fick fortfarande Trusted_Connection=yes, som ODBC-drivrutinen avvisade med felet FA001 (Cannot use Authentication option with Integrated Security option). Korrigeringen identifierar alla explicita Authentication= värden med en gränsmedveten, skiftlägeskänslig matchning och hoppar över både Trusted_Connection och Integrated Security=SSPI. Lösenordshanteringen är oförändrad: SqlPassword, ActiveDirectoryPasswordoch ActiveDirectoryServicePrincipal fortsätter att skicka PWD, medan ActiveDirectoryInteractive fortsätter att utelämna den.
  • KeyError på underklass DatabaseWrapper: De cachelagrade sql_server_version egenskaperna och to_azure_sql_db egenskaperna förlitade sig på type(self).__dict__ introspektion av cached_property, vilket väckte KeyError första gången en DatabaseWrapper underklass fick åtkomst till dem (en regression som introducerades i 1.7.1). Korrigeringen använder explicita dikteringar på klassnivå (_known_versions, _known_azures) som nås via self., så sökningen matchas via MRO och underklassade omslutningar fungerar korrekt.

Version 1.7.2

Utgivningsdatum: maj 2026

Version 1.7.2 är en bakåtkompatibel korrigeringsversion med tidszon och kompatibilitetskorrigeringar.

Felkorrigeringar

  • .explain() kompatibilitet med Django 4.0 och senare: Åtgärdade kompilatorns hantering av Djangos explain-metadata så att .explain() inte längre misslyckas med AttributeError i Django 4.0 och senare. Backenden följer nu versionsanpassade explain-fält och utlöser korrekt NotSupportedError vid behov.
  • datetimeoffset-hantering av tidszoner: Åtgärdade tolkningen av datetimeoffset så att tidszonsförskjutningar bevaras i stället för att tappas bort. Returnerade datum/tid-värden har nu information om tidszon när så förväntas.
  • Now() med USE_TZ=True: Uppdaterad SQL-generering för Now() att använda tidszonsmedvetna beteenden när tidszonsstöd är aktiverat, vilket förhindrar tidsstämpelavvikelser på icke-UTC-SQL Server värdar.

Version 1.7.1

Utgivningsdatum: april 2026

Version 1.7.1 är en bakåtkompatibel korrigeringsversion med felkorrigeringar.

Felkorrigeringar

  • FieldDoesNotExist vid ändring av fält med fallande indexordning: Korrigerade _alter_field() i schema.py för att använda index.fields_orders i stället för index.fields vid matchning av indexfältnamn. Den tidigare koden skickade vidare råa strängar för field-with-ordering (till exempel "-pub_date") till model._meta.get_field(), vilket utlöste FieldDoesNotExist. Nu extraheras endast fältnamnet, och ordningssuffixet kasseras korrekt.
  • Stöd för SQL-databas i Microsoft Fabric (EngineEdition 12): Kände igen SQL-databas i Fabric (EngineEdition=12) som en Azure-version. Tidigare kändes Fabrics motorutgåva inte igen, vilket gjorde att to_azure_sql_db returnerade False och att kontroller av funktionsspärrar misslyckades. Korrigeringen lägger EDITION_AZURE_SQL_FABRIC=12 till _AZURE_EDITIONS och mappar Fabric till den senaste SQL Server version som stöds. JSONField, hashfunktioner, inspektion av sorteringsordning och nedmontering av testdatabaser fungerar nu korrekt på Fabric.

Version 1.7

Utgivningsdatum: mars 2026

Höjdpunkter

  • Stöd för Django 6.0: Fullständig kompatibilitet med Django 6.0, vilket kräver Python 3.12 eller senare. Alla 6.0 API-ändringar hanteras transparent av serverdelen.
  • Partiellt CompositePrimaryKey stöd: Serverdelen lägger till partiellt stöd för Django 5.2 CompositePrimaryKey. Jämförelse av tupler med underfrågor kräver Django 5.2.4 eller senare, och vissa kantfall för sammansatta nycklar och JSONField kvarstår. Django 5.2 fick först stöd i mssql-django 1.6.
  • stöd för SQL Server 2025: Verifierat mot SQL Server 2025.
  • Standardinställning för ODBC-drivrutin 18: Serverdelen är nu som standard ODBC-drivrutin 18 för SQL Server, med automatisk återställning till ODBC Driver 17 om version 18 inte är installerad.

Versionsspecifika anteckningar

Django-version Notes
Django 5.1 inspectdb kan inspektera tabeller med sammansatta primära nycklar, men det genererar inte fullständiga modelldefinitioner för dem.
Django 5.2 CompositePrimaryKey stödet är delvis. Jämförelse av tupler med underfrågor kräver Django 5.2.4 eller senare, och det återstår fortfarande vissa migreringar samt specialfall med JSONField.
Django 6.0 Kräver Python 3.12 eller senare. Alla 5.2-begränsningar gäller.

Version 1.6

Utgivningsdatum: augusti 2025

  • Stöd för Django 5.1 och 5.2 har lagts till.
  • Förbättrade JSON-funktioner och bakåtkompatibilitet.
  • Förbättrad pipelineinfrastruktur.

Version 1.5

Utgivningsdatum: april 2024

  • Lade till funktionsflaggan supports_comments för db_comments.
  • Felkorrigeringar för AutoField, parameterformatering och schemafrågor.

Version 1.4

Utgivningsdatum: januari 2024

  • Stöd för Django 5.0 har lagts till.
  • Stöd för db_comment har lagts till.
  • Felkorrigeringar för datum/tid-konverteringar och tomma aggregeringar.

Version 1.3

Utgivningsdatum: maj 2023

  • Stöd för Django 4.2 har lagts till.
  • Stöd för skiftlägeskänslig funktion för Replace har lagts till.
  • Felkorrigeringar för hanteringen av OFFSET och vänsterutfyllnad.

Version 1.2

Utgivningsdatum: december 2022

  • Stöd för Django 4.1 har lagts till.
  • Stöd för tidszon har lagts till (datetimeoffset med USE_TZ=True).
  • return_rows_bulk_insert alternativet för ID-hämtning vid massinfogning har lagts till.
  • Stöd för SQL Server 2022 har lagts till.
  • Stöd för Azure SQL Managed Instance har lagts tillJSONField.

Version 1.1

Utgivningsdatum: juli 2022

  • Stöd för Django 3.2 och 4.0.
  • SQL Server 2016 och senare och Azure SQL Database support.
  • pyodbc-baserad anslutning.