Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk felsorolja a mssql-django backend korlátait, amikor SQL Server, Azure SQL Database, Azure SQL Managed Instance és SQL database a Microsoft Fabric-ben használatban van.
Django funkciókorlátai
Az alábbi Django funkciók nem támogatottak vagy korlátozott a mssql-django háttérrendszerrel:
| Feature | Status | Részletek |
|---|---|---|
Avg és DurationField |
Nem támogatott | Az aggregált Avg nem működik .DurationField |
__regex és __iregex keresések |
Telepítést igényel | Támogatott, miután telepítette a CLR assembly SQL Server-re vagy Azure SQL Managed Instance-ra. Azure SQL Database nem támogatja CLR assemblies-t. Lásd: Regex lekérdezések beállítása. |
DISTINCT ON |
Nem támogatott | Az SQL Server nem támogatja DISTINCT ON a záradékokat. Használj .values().distinct() vagy kiváltott lekérdezéseket. |
Subquery a(z) ORDER BY rendszerben |
Nem támogatott | Az allekérdezések szerinti sorrendezés nem feltétlenül működik. |
Adatbázis-szintű CASCADE |
Limited | Néhány SET NULL művelet SET DEFAULT manuális migrációt igényelhet SQL-t. |
is_dst a következőben: Trunc/Extract |
Nem támogatott |
is_dst a paraméter (amelyet a nyári időszámítások kétértelmű időpontok megoldására használnak) be, Extract() és Trunc() nem támogatott. Használat AT TIME ZONE nyers SQL-ben DST-érzékeny lekérdezésekhez. |
| Lebegőpontos megjegyzés | Limited | A lebegőpontos Avg aggregátumok a PostgreSQL-hez képest a SQL Server lebegő típusú viselkedése miatt elveszíthetik pontosságukat. Például, ha 0,1 és 0,2 átlaggal adunk 0,1500000000000000000000022 értéket pontosan 0,15 helyett. Felhasználás DecimalField vagy Cast(avg_expr, output_field=DecimalField()) kritikus pénzügyi számítások esetén. |
Megjegyzések/léteznek ORDER BY |
Nem támogatott | Az annotáció vagy létező kifejezések használata order_by nem feltétlenül működik. |
| Jobbkezes hatvány és dátumidő számozás | Nem támogatott | A jobbkezes erőműveletek (például működik F('value') ** 2 , de 2 ** F('value') kudarcot vall) és a osztás nem timedelta támogatott. |
| Időzónák és idődelták | Limited | Az időzónák és idődelták nem teljesen támogatottak. Lásd az Időzóna támogatást az mssql-django-ban. |
NthValue Ablakfüggvény |
Nem támogatott | Az SQL Server nem támogatja NTH_VALUE(). Használj FIRST_VALUE, LAST_VALUE, vagy egy allekérdezést. |
ignore_conflicts a(z) bulk_create rendszerben |
Nem támogatott |
bulk_create(objs, ignore_conflicts=True) nem támogatott. Az SQL Server-nek nincs megfelelője a PostgreSQL-évé ON CONFLICT DO NOTHING. |
JSONField contains keresés |
Nem támogatott | Használj helyette kulcs-út lekérdezéseket (például filter(metadata__color="blue")). Lásd a JSONField korlátozásait. |
select_for_update(of=(...)) |
Nem támogatott | Az SQL Server nem támogatja bizonyos táblák zárolását. A háttér emeli NotSupportedErrora . Lásd: Tranzakciókezelés. |
A migrálásra vonatkozó korlátozások
| Limitation | Részletek |
|---|---|
Alter AutoField |
Nem lehet egy mezőt (oszlopba) vagy AutoFieldIDENTITY -re váltani. Ehhez új táblázat kell létrehozni. |
| Átnevezés idegen billentyűkkel | Egy olyan oszlop átnevezése, amelynek van külföldi kulcskorlátai, meghibásodott. Használja a SeparateDatabaseAndState. |
AddConstraint
/
RemoveConstraint Konfliktusok |
Bizonyos korlátozási műveletek ütközhetnek. Jelentkezz külön migrációkban. |
| Dátumkivonat műveletek |
ExtractYear, ExtractMonth, és hasonló műveletek korlátozott tzinfo támogatással rendelkeznek. |
JSONField korlátozások
-
mssql-djangoTérképekJSONFieldnvarchar(max) irányába. Az SQL Server 2025 bevezetett egy natív json típust, de a Microsoft ODBC Driver for SQL Server nem mutatja be. - A
containskeresés nem támogatott. Használj helyette kulcs-út lekérdezéseket (példáulfilter(metadata__color="blue")). - A idézetelt stringértékek extra idézőjelekkel térnek vissza (például
'"value"'helyette'value'). - Néhány beépített lekérdezés másképp viselkedhet, mint a PostgreSQL-en.
- További információért lásd: JSONField with SQL Server.
InspectDB korlátozások
- Az összetett elsődleges kulcsok nem automatikusan generálódnak
unique_together. - Néhány SQL Server-specifikus oszloptípus általános Django mezőkhöz egyezhet meg.
- Nézd át és igazítsd kézzel a generált modelleket.
- További információért lásd: Reverse-engineer models with inspectdb.
SQL Server paraméterkorlát
Az SQL Server minden lekérdezést legfeljebb 2 100 paraméterre korlátoz. Ez a korlát a Django műveletekre vonatkozik, amelyek paraméterezett lekérdezéseket generálnak nagy értékű listákkal:
| Operation | Hogyan éri el a határt |
|---|---|
filter(field__in=large_list) |
Minden lista elem egy paraméterré válik. A háttérrendszer automatikusan optimalizálja több mint 2 048 tételt egy ideiglenes táblába. |
prefetch_related() |
Minden szülői objektumazonosító egy paraméter lesz a kapcsolódó lekérdezés WHERE IN záradékában. Automatikus optimalizálás, például filter(field__in=...) ha több mint 2 048 azonosító van. |
bulk_create() |
Minden objektum minden mezője paraméterré válik. Egy modell, amelynek 10 mezője és 250 objektuma van, 2 500 paramétert generál. |
bulk_update() |
Minden mező két paramétert használ objektumonként (egyet a PK egyezésre, egyet az értékre). |
Q() sok feltétellel |
Minden érték láncolt Q objektumokban egy paraméterré válik. |
Kezdj batch_size el tömeges műveleteket végezni, és nagy IN mennyiségű lekérdezést végezzek. A megoldásokért lásd Teljesítmény hangolást .
Tömeges műveletek korlátozásai
-
bulk_createreturn_rows_bulk_insert=Falsenem küld vissza igazolványokat. Kötelező olyan táblákhoz, ahol kiváltó eszközök. Lásd: Tömeges műveletek mssql-django-val.
Tesztkeret korlátai
--keepdb szükséges menedzselt azonosítás esetén (ActiveDirectoryMsi), mert a tesztfuttató nem tud adatbázisokat létrehozni vagy megsemmisíteni ezzel a hitelesítési módszerrel.
További információért lásd: Test Django apps with SQL Server.
Verzióspecifikus jegyzetek
| MSSQL-django verzió | Jegyzetek |
|---|---|
| 1.7.4 | Fixáltam IndexError azokat a GROUP BY lekérdezéseket, amelyek keverik a menekült %% literálisokat valódi paramokkal. Javítva NotImplementedError a IntegerChoices paramokra a nyers GROUP BY lekérdezésekben. |
| 1.7.3 | Javítva FA001 más Authentication= módokra is, mint ActiveDirectoryMsi. Fixálva KeyErrorDatabaseWrapper alosztályozott (regresszió az 1.7.1-ből). |
| 1.7.2 | Fix időzóna kezelés a datetimeoffset esetén és Now() .USE_TZ=True Javítottam .explain() a kompatibilitást a Django 4.0 és újabb verziókhoz. |
| 1.7.1 | SQL adatbázis a Fabric-ben (EngineEdition 12) javítás. Csökkenő indexjavítás AlterField . |
| 1.7 | Az ODBC Driver 18 az alapértelmezett. Django 6.0, Python 3.14, SQL Server 2025 támogatás hozzáadva. |
| 1.6 | Django 5.1 és 5.2 támogatás. Fejlesztett JSON funkció. |
| 1.5 | Hibajavítások AutoFieldhez, paraméterformázáshoz és sémalekérdezésekhez. |
| 1.4 | Django 5.0 támogatás.
db_comment támogat. |
| 1.3 | Django 4.2 támogatás. |
| 1.2 | Django 4.1 támogatás. Időzóna támogatás.
return_rows_bulk_insert opció. SQL Server 2022 támogatás. |
| 1.1 | Django 3.2 és 4.0 támogatás. |
Django verzió-specifikus jegyzetek
| Django verzió | Jegyzetek |
|---|---|
| 5.1 |
inspectdb Képes megvizsgálni összetett elsődleges kulcsú táblákat, de nem generál teljes modelldefiníciókat számukra. |
| 5.2 |
CompositePrimaryKey A támogatás részleges.
inspectdb továbbra is kézi javításokat igényel, a tuple-összehasonlításhoz az allekérdezésekkel Django 5.2.4 és újabb verziók szükségesek, valamint némi migráció plusz JSONField tömeg/CASE WHEN frissítési útvonalakon még vannak tesztkizárások. További információért lásd a GitHub repozióriumot. |
| 6.0 | Ehhez Python 3.12 és újabb verziók szükségesek. Minden 5.2-es korlátozás érvényes. A backend átláthatóan kezeli az összes 6.0-s API változást. |
Regex lekérdezések beállítása
A mssql-django backend támogatja a __regex Django-kat és __iregex a lekérdezéseket, de ehhez egyszeri beállítási lépés szükséges. A háttérrendszer egy CLR assembly (regex_clr.dll) rendszert biztosít, amely funkciót dbo.REGEXP_LIKE biztosít az SQL Server-nek.
Prerequisites
- Egy SQL Server példány, amely támogatja a CLR integrációt. On-premises SQL Server és Azure SQL Managed Instance support CLR.
Az Azure SQL Database nem támogatja a CLR összeállításokat, így
__regexés__iregexlekérdezések nem elérhetők az Azure SQL Database-ben. - A csatlakozó felhasználónak engedélyt
sysadminkell szereznie vagyALTER SETTINGSengedélyt kell szereznie. A menedzsment parancs automatikusan engedélyezi a CLR-t. - Az
mssqlalkalmazásnak meg kell lennieINSTALLED_APPS.
Telepítsd a CLR összeállítást
Futtasd be a menedzsment parancsot, és add át az adatbázis nevét:
python manage.py install_regex_clr <your-database-name>
Ez a parancs a következő lépéseket végzi:
- Engedélyezi a CLR-t a szerveren (
sp_configure 'clr enabled', 1), ha még nincs engedélyezve. - Beállítás
clr strict securitybe0(szükséges azSAFESQL Server 2017+ összeállításaihoz). - Létrehozza a
regex_clrassembly összeállítást a csomagolt DLL-ből. - Létrehozza a
dbo.REGEXP_LIKEskaláris funkciót.
Caution
Beállítás clr strict security0 lehetővé teszi az aláíratlan CLR összeállítások betöltését. Ez azért szükséges, mert a csomag regex_clr.dll nincs aláírva. Beszéld meg ezt a változást a DBA-ddal, mielőtt a parancsot a gyártó szervereken futtatnád. Ez a beállítás szerverre vonatkozik, nem adatbázisonként.
Használj regex lekérdezéseket
A assembly telepítése után használd __regex és __iregex a querysetekben:
# Case-sensitive regex
products = Product.objects.filter(name__regex=r"^Widget \d+$")
# Case-insensitive regex
products = Product.objects.filter(name__iregex=r"^widget \d+$")
A háttérrendszer ezeket a lekérdezéseket úgy fordítja le.dbo.REGEXP_LIKE(column, pattern, case_flag) = 1
Note
A parancsot egyszer kell futtatnod install_regex_clr adatbázisonként. Ha az adatbázist eltávolítják és újraalkotják (például tesztelés közben), futtasd újra a parancsot.