Az mssql-django kapcsolati beállításai

Ez a cikk a OPTIONS Django-konfiguráció DATABASES szótárbeállításait ismerteti. Ezek a beállítások meghatározzák, hogy mssql-django hogyan csatlakozik az SQL Serverhez az ODBC-illesztőprogramon keresztül.

ODBC-illesztő kiválasztása

mssql-django Az 1.7-es verziótól kezdve a háttérrendszer alapértelmezés szerint a SQL Serverhez készült ODBC Driver 18-at használja. Ha az ODBC Driver 18 nincs telepítve, a háttérrendszer automatikusan visszakerül az ODBC-illesztőprogram 17-esére.

Note

Az ODBC Driver 18 alapértelmezés szerint engedélyezi Encrypt=yes és ellenőrzi a kiszolgálótanúsítványt. A 17-es illesztőprogrammal korábban működő kapcsolatok SSL/TLS-megbízhatósági hiba miatt meghiúsulhatnak. A hiba megoldása:

  • Helyszíni SQL Server esetén telepítsen egy kiszolgálótanúsítványt egy olyan hitelesítésszolgáltatótól, amelybe az ügyfelek már megbíznak, vagy importálja a meglévő kiszolgálótanúsítványt minden ügyfélmegbízhatósági tárolóba. Útmutatásért lásd: SQL Server adatbázismotor konfigurálása a kapcsolatok titkosításához.
  • Ha olyan IP-címmel vagy álnévvel csatlakozik, amely nem egyezik a tanúsítvány tulajdonosnevével vagy alternatív tulajdonosnevével (SAN), adja hozzá a(z) HostNameInCertificate=<name-from-certificate> elemet a következőhöz: extra_params.

Ha önaláírt tanúsítvánnyal végez helyi fejlesztést, lásd a(z) Extra ODBC-paraméterek című rész TrustServerCertificate elemét.

Az illesztőprogramot explicit módon is megadhatja:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 17 for SQL Server",
        },
    },
}

Linuxon megadhatja az illesztőprogram-kódtár teljes elérési útját is:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.0.so.1.1",
        },
    },
}

DSN és HOST

A csatlakozáshoz használhat egy HOST nevet vagy egy nevesített DSN-t (adatforrás neve).

Kapcsolódás a HOST-hoz

A legtöbb konfiguráció közvetlenül használja a HOST beállítást:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
        },
    },
}

Csatlakozás a DSN-hez

Használja az ODBC-adatforrásokban konfigurált nevesített DSN-t:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "OPTIONS": {
            "dsn": "MyDataSourceName",
        },
    },
}

FreeTDS-támogatás

A FreeTDS ODBC-illesztőprogramként való használatához állítsa a(z) host_is_server értékét True értékre. Ez arra utasítja a háttérrendszert, hogy közvetlenül a(z) HOST és PORT elemeket használja ahelyett, hogy a(z) freetds.conf elemben keresné ki az adatkiszolgáló nevét:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "FreeTDS",
            "host_is_server": True,
        },
    },
}

A FreeTDS-sel létesített DSN-nélküli kapcsolatokról további információt a FreeTDS felhasználói útmutatójában talál.

További ODBC-paraméterek

További ODBC-kapcsolati karakterlánc paraméterek átadására használhatóextra_params. Az érték egy pontosvesszővel tagolt karakterlánc, amely a kapcsolati karakterlánchoz van hozzáfűzve:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>.database.windows.net",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
            "extra_params": "TrustServerCertificate=yes;ApplicationIntent=ReadOnly",
        },
    },
}

Ez a beállítás Microsoft Entra hitelesítési kulcsszavakhoz is használható.

Caution

Csak helyi fejlesztéshez használható TrustServerCertificate=yes önaláírt tanúsítványokkal. Ne használja éles környezetben. Letiltja a tanúsítványlánc érvényesítését, és növeli a középen belüli támadói kockázatot. Telepítsen egy megbízható tanúsítványt a kiszolgálón, és csatlakozzon a kiszolgálóhoz TrustServerCertificate=no.

Kapcsolati időtúllépések és újrapróbálkozások

Konfigurálja a kapcsolat rugalmasságát időtúllépési és újrapróbálkozási beállításokkal:

Option Alapértelmezett Leírás
connection_timeout 0 (letiltva) A kapcsolatra való várakozás maximális másodperce.
connection_retries 5 A csatlakozási hiba újrapróbálkozási kísérleteinek száma.
connection_retry_backoff_time 5 Várakozási idő az újrapróbálkozási kísérletek között.
query_timeout 0 (letiltva) A lekérdezés befejezésére váró maximális másodperc.

Example:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
            "connection_timeout": 30,
            "connection_retries": 3,
            "connection_retry_backoff_time": 10,
            "query_timeout": 120,
        },
    },
}

Collation

Egyéni rendezés beállítása szövegmező-keresésekhez:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
            "collation": "Chinese_PRC_CI_AS",
        },
    },
}

Több adatbázis-kapcsolat

A Django támogatja a több adatbázishoz való egyidejű csatlakozást. Ez hasznos olvasási replikákhoz, adatbázisközi lekérdezésekhez vagy a számítási feladatok elkülönítési szint szerinti elválasztásához.

Több adatbázis konfigurálása

Adja meg az egyes kapcsolatokat a DATABASES beállításban:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "app_db",
        "HOST": "<your-primary-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
        },
    },
    "readonly": {
        "ENGINE": "mssql",
        "NAME": "app_db",
        "HOST": "<your-readonly-replica>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
            "extra_params": "Encrypt=yes;ApplicationIntent=ReadOnly",
        },
    },
    "analytics": {
        "ENGINE": "mssql",
        "NAME": "analytics_db",
        "HOST": "<your-analytics-server>",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
            "isolation_level": "READ UNCOMMITTED",
        },
    },
}

Caution

READ UNCOMMITTED lehetővé teszi a piszkos olvasást. Ezt az elkülönítési szintet csak olyan jelentéskészítési vagy elemzési lekérdezésekhez használja, ahol nincs szükség abszolút pontosságra. További információ: Tranzakciókezelés.

Lekérdezések átirányítása adatbázis-útválasztóval

Hozzon létre egy adatbázis-útválasztót az olvasási és írási műveletek megfelelő kapcsolathoz való irányításához:

class ReadReplicaRouter:
    """Route read queries to the readonly replica, writes to the primary."""

    def db_for_read(self, model, **hints):
        return "readonly"

    def db_for_write(self, model, **hints):
        return "default"

    def allow_relation(self, obj1, obj2, **hints):
        return True

    def allow_migrate(self, db, app_label, model_name=None, **hints):
        return db == "default"

Regisztrálja az útválasztót a következő helyen settings.py:

DATABASE_ROUTERS = ["myproject.routers.ReadReplicaRouter"]

Mentse az útválasztó osztályt egy fájlba, például myproject/routers.py.

Adott adatbázis közvetlen lekérdezése

using() A metódussal lekérdezhet egy adott adatbázis-aliast:

# Explicit read from analytics database
reports = AnalyticsReport.objects.using("analytics").filter(date__gte="2025-01-01")

# Write to default
Product.objects.create(name="Widget", price=9.99)

A kapcsolatonkénti adatbázisok elkülönítési szintjeiről további információt az Adatok blokkolás nélküli olvasása című témakörben talál.