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.
mssql-django a Microsoft Django adatbázis-háttérrendszere az SQL Serverhez, az Azure SQL Database-hez, az Azure SQL Managed Instance-hez és a Microsoft Fabricben található SQL-adatbázishoz. A csatlakozáshoz állítsa a(z) ENGINE értékét "mssql" értékre a Django DATABASES konfigurációjában. A háttérrendszer a pyodbc-ra és a Microsoft ODBC-illesztőre épül a SQL Server számára, és támogatja a Django 3.2-től 6.0-ig, Python 3.8-3.14-ig, és SQL Server 2016-2025-ig.
Válassza ki a kiindulási pontot
- Ha gyorsan össze szeretne kapcsolni egy Django-projektet az SQL Serverrel, kezdje a Gyorsútmutató: Django csatlakoztatása az SQL Serverhez című témakörrel.
- Ha jelszó nélküli hitelesítéssel szeretné csatlakoztatni a Django-t Azure SQL, kezdje Microsoft Entra hitelesítéssel és konfigurációs hivatkozással.
- Ha egy meglévő SQL Server-adatbázist szeretne integrálni a Django-ba, lásd: Modellek visszafejtése az inspectdb használatával.
- Django-webhely Azure-ban történő üzembe helyezéséhez nyissa meg a Üzembe helyezés az Azure App Service-be és a Tároló és helyi fejlesztés oldalt.
- Ha másik Django-háttérrendszerből vagy adatbázisból szeretne migrálni, lépjen a Migrálás django-mssql-háttérrendszerről, migrálás más adatbázisokból vagy Migrálás a PostgreSQL-ből.
Azure SQL üzemi alapkonfigurációja
Használja ezt a kódrészletet egy éles Azure SQL konfiguráció kiindulópontjaként. Négy fájlt egyesít: settings.py (a Django-adatbázis konfigurációja, köztes szoftverregisztráció és naplózás), myproject/retry.py (az átmeneti hibakatalógus és retry_on_transient a dekorátor), myproject/middleware.py (a kérelemszintű újrapróbálkozási köztes szoftver) és myapp/views.py (például tranzakciós nézet).
# settings.py
import logging.config
import os
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": os.environ["SQL_DATABASE"], # for example, appdb
"HOST": os.environ["SQL_SERVER"], # for example, contoso.database.windows.net
"PORT": "1433",
"CONN_MAX_AGE": 300, # reuse pooled connections for 5 minutes
"CONN_HEALTH_CHECKS": True, # validate connections before reuse (Django 4.1 and later)
"ATOMIC_REQUESTS": False, # wrap mutating views in transactions explicitly (see the following view example)
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": (
"Authentication=ActiveDirectoryMsi;"
"Encrypt=yes;"
"TrustServerCertificate=no;"
# ODBC driver reconnects connections dropped while idle.
"ConnectRetryCount=3;"
"ConnectRetryInterval=10;"
),
# Backend-level retry for the initial connect call. Complements
# ConnectRetryCount, which only covers idle drops on an
# already-established connection.
# See Retry logic and connection resilience for the recognized error list.
"connection_retries": 3,
"connection_retry_backoff_time": 5,
},
},
}
MIDDLEWARE = [
# Defined in myproject/middleware.py. Catches transient OperationalErrors
# and retries the request. Add "1205" (deadlock victim) and "1222"
# (lock-request timeout) to TRANSIENT_ERROR_CODES to also retry
# statement-level failures.
"myproject.middleware.DatabaseRetryMiddleware",
"django.middleware.security.SecurityMiddleware",
# ... your other middleware
]
LOGGING_CONFIG = None
logging.config.dictConfig({
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"json": {
"format": (
'{"time":"%(asctime)s","level":"%(levelname)s",'
'"logger":"%(name)s","message":"%(message)s"}'
),
},
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "json",
},
},
"loggers": {
"django.db.backends": {
"handlers": ["console"],
"level": "WARNING", # raise to INFO or DEBUG to capture SQL
"propagate": False,
},
"django.request": {
"handlers": ["console"],
"level": "WARNING",
"propagate": False,
},
"mssql": {
"handlers": ["console"],
"level": "INFO",
"propagate": False,
},
},
})
Adja meg a megosztott átmeneti hibakatalógust és a retry_on_transient dekoratőrt a következőben myproject/retry.py:
# myproject/retry.py
import functools
import logging
import random
import re
import time
from django.db import OperationalError, connection
logger = logging.getLogger(__name__)
TRANSIENT_ERROR_CODES = {
"64", "233", "4221",
"10053", "10054", "10928", "10929",
"40197", "40501", "40613",
"49918", "49919", "49920",
# Add "4060" only if targeting Azure SQL with geo-replication failover.
# Add "1205" (deadlock victim) and "1222" (lock-request timeout) to
# also retry statement-level failures.
}
# Microsoft ODBC driver formats native error codes as "(<number>)" in the
# message. Parenthesized matches avoid false positives for short codes like "64".
_CODE_RE = re.compile(r"\((\d+)\)")
def is_transient(error):
codes_in_message = set(_CODE_RE.findall(str(error)))
return bool(codes_in_message & TRANSIENT_ERROR_CODES)
def retry_on_transient(max_retries=3, base_delay=1, max_delay=30):
"""Retry on transient database errors with exponential backoff and full jitter."""
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_retries + 1):
try:
return func(*args, **kwargs)
except OperationalError as e:
if attempt < max_retries and is_transient(e):
capped = min(max_delay, base_delay * (2 ** attempt))
delay = random.uniform(0, capped)
logger.warning(
"Transient error in %s (attempt %d/%d), retrying in %.2fs: %s",
func.__name__, attempt + 1, max_retries, delay, e
)
connection.close()
time.sleep(delay)
continue
raise
return wrapper
return decorator
Definiálja a kérelemszintű köztes réteget itt: myproject/middleware.py. Újra felhasználja, is_transient hogy mindkét réteg felismerje ugyanazt a hibakódkészletet:
# myproject/middleware.py
import logging
import random
import time
from django.db import OperationalError, connection
from myproject.retry import is_transient
logger = logging.getLogger(__name__)
class DatabaseRetryMiddleware:
"""Retry the entire request on transient database errors."""
def __init__(self, get_response):
self.get_response = get_response
self.max_retries = 3
self.base_delay = 1 # seconds; doubled each attempt
self.max_delay = 30 # cap on a single sleep, regardless of attempt
def __call__(self, request):
for attempt in range(self.max_retries + 1):
try:
return self.get_response(request)
except OperationalError as e:
if attempt < self.max_retries and is_transient(e):
capped = min(self.max_delay, self.base_delay * (2 ** attempt))
delay = random.uniform(0, capped)
logger.warning(
"Transient DB error (attempt %d/%d), retrying in %.2fs: %s",
attempt + 1, self.max_retries, delay, e
)
connection.close()
time.sleep(delay)
continue
raise
Mivel a(z) ATOMIC_REQUESTSFalse, a módosító nézeteknek saját tranzakciót kell nyitniuk. Csomagolja be a atomic() blokkot úgy @retry_on_transient , hogy minden újrapróbálkozás egy friss tranzakciót futtasson:
# myapp/views.py
from django.db import transaction
from django.http import JsonResponse
from myproject.retry import retry_on_transient
from .models import Order
# Exponential backoff with full jitter: sleeps random within [0,2], [0,4], [0,8] seconds.
@retry_on_transient(max_retries=3, base_delay=2)
def submit_order(request, order_id):
with transaction.atomic():
order = Order.objects.select_for_update().get(id=order_id)
order.status = "submitted"
order.save()
return JsonResponse({"id": order.id, "status": order.status})
Note
Ez az alapkonfiguráció két rétegben regisztrálja az újrapróbálkozási műveletet. A middleware biztosítékként szolgál az adatbázis-hozzáféréshez a dekorátorral ellátott nézeteken kívül, például az adminfelületen, a szignálokban vagy más middleware-ben. A @retry_on_transient dekoratőr finomabb vezérlést biztosít a nézetkészítőknek, hogy mely műveletek újrapróbálkoznak. Ha egy átmeneti hiba átjut a dekorátoron, a middleware újra lefuttatja a teljes kérést, így a legrosszabb esetben akár kilenc próbálkozásra is sor kerülhet, mielőtt a kliens hibát kap. Ha ez a felső határ túl magas a késleltetési keretéhez, hagyjon el egy réteget, vagy csökkentse a megtartott rétegen a max_retries értékét.
A konfiguráció egyes részeiről további információt a konfigurációs referencia, a kapcsolatbeállítások, a kapcsolatkészletezés, az újrapróbálkozási logika és a kapcsolat rugalmassága, valamint a Microsoft Entra hitelesítés című témakörben talál.
Legfontosabb funkciók
-
Beépülő Django-háttérrendszer: Állítsa a(z)
ENGINEértékét"mssql"értékre, és a Django ORM-je, migrációi, adminfelülete és felügyeleti parancsai az SQL Serverrel működnek. - Pyodbc és ODBC Driver 18: TLS-titkosított kapcsolatok alapértelmezés szerint és széles körű platformtámogatás Windows, Linux és macOS rendszeren.
- Széles verziómátrix: Django 3.2–6.0, Python 3.8–3.14, és SQL Server 2016 és 2025 között.
-
Microsoft Entra ID hitelesítés: Jelszó nélküli kapcsolatok felügyelt identitással, szolgáltatásnévvel, interaktív és integrált folyamatokkal
extra_params. - Django-migrálások: Sémamigrálások SQL Server, beleértve SQL Server-specifikus oszloptípusokat is.
-
JSONField-támogatás: Natív
JSONFieldtámogatás az nvarchar(max) tárolásra és a Django kereséseire épülve. - Always Encrypted: Bizalmas oszlopok ügyféloldali titkosítása.
-
Tömeges műveletek:
bulk_createésbulk_updateSQL Serveren, megfelelő kötegméretekkel. - Átmeneti újrapróbálkozások: Beépített kezelés a gyakori Azure SQL átmeneti hibákhoz a kapcsolat és a lekérdezés végrehajtása során.
-
inspectdb: Django-modellek létrehozása meglévő SQL Server sémákból.
Első lépések
| Cikk | Description |
|---|---|
| Installation | Telepítse a(z) mssql-django és a Microsoft ODBC-illesztőprogramot a SQL Serverhez. |
| Rövid útmutató: Django csatlakoztatása SQL Server | Kapcsolja össze a Django-projektet az SQL Serverrel, majd futtassa az első migrációját. |
Konfigurálás és csatlakoztatás
| Cikk | Description |
|---|---|
| Konfigurációs referencia | A Django DATABASES szótár teljes referenciája mssql-django használatával. |
| Kapcsolati beállítások |
OPTIONS, extra_params, időtúllépések és az ODBC-illesztőprogram konfigurálása. |
| Kapcsolatkészletezés |
CONN_MAX_AGE, CONN_HEALTH_CHECKS és külső pool integrációja. |
| Újrapróbálkozási logika és kapcsolati rugalmasság | Átmeneti hibák észlelése, kapcsolatok és lekérdezések újrapróbálkozása. |
| Microsoft Entra-hitelesítés | Jelszó nélküli hitelesítés felügyelt identitással, szolgáltatásnévvel, interaktív és integrált folyamatokkal. |
| biztonsági ajánlott eljárások | Paraméterezés, titkos kódok kezelése, minimális jogosultság és titkosítás. |
| Mindig titkosítva | Ügyféloldali titkosítás konfigurálása bizalmas oszlopokhoz. |
Modellek, migrálások és adattípusok
| Cikk | Description |
|---|---|
| Adatbázis-migrálások | Django-migrációkat futtathat SQL Serveren, beleértve az SQL Server-specifikus oszloptípusokat is. |
| A Django-mezők SQL Server-típusmegfeleltetései | A Django-modell mezőinek leképezése SQL Server adattípusokra. |
| JSONField-támogatás | Használja JSONField SQL Server és Django keresésekhez. |
| Visszafejtett mérnökmodellek az inspectdb használatával | Django-modellek létrehozása meglévő SQL Server sémákból. |
| Időzóna támogatása |
USE_TZ, datetimeoffset és időzóna-tudatos dátum-idő értékek. |
Adatok lekérdezése és használata
| Cikk | Description |
|---|---|
| Tömeges műveletek |
bulk_create, bulk_updateés a köteg méretének finomhangolása. |
| Tranzakciókezelés |
atomic, elkülönítési szintek, mentési pontok és holtpont kezelése. |
| Nyers SQL-lekérdezések |
RawSQL, connection.cursor() és SQL Server-specifikus szintaxis. |
| Tárolt eljárások | SQL Server tárolt eljárások hívása Djangóból. |
Üzembe helyezés, tesztelés és hangolás
| Cikk | Description |
|---|---|
| Az Azure App Service üzembe helyezése | Django-webhely üzembe helyezése az Azure App Service-be az mssql-django használatával. |
| Konténeres és helyi fejlesztés | Docker-tárolók, devcontainers és CI-folyamatok a Django + SQL Server számára. |
| Testing | Futtassa a Django tesztcsomagokat SQL Serveren. |
| Teljesítmény finomhangolása | Indexek, lekérdezési minták, kapcsolat újrafelhasználása és kötegméretek. |
| Troubleshooting | Gyakori hibák, ODBC-diagnosztika és naplózás. |
Migrálás az mssql-django-ba
| Cikk | Description |
|---|---|
| Migrálás a django-mssql-backendről | Váltás a közösségi django-mssql-backend csomagról a mssql-django csomagra. |
| Migrálás más adatbázisokból | Django-projekt áthelyezése egy másik adatbázis háttérrendszeréből SQL Server. |
| Migrálás a PostgreSQL-ből | Átfogó útmutató Django-fejlesztőknek a PostgreSQL-ről SQL Serverre való áttéréshez. |
Kapcsolódó tevékenységek
| Cikk | Description |
|---|---|
| Támogatási életciklus | Támogatott Django, Python és SQL Server verziók. |
| Újdonságok | Verzióelőzmények és kiadási kiemelések. |
| Az mssql-django korlátozásai és nem támogatott funkciói | Háttérbeli korlátozások és nem támogatott funkciók. |
| FAQ | Gyakori kérdések. |