Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek vysvětluje nastavení slovníku OPTIONS v konfiguraci Django DATABASES . Tato nastavení řídí, jak mssql-django se připojuje k SQL Server prostřednictvím ovladače ODBC.
Výběr ovladače ODBC
Od verze mssql-django 1.7 je backend ve výchozím nastavení nastaven na ODBC Driver 18 for SQL Server. Pokud není nainstalovaný ovladač ODBC 18, back-end se automaticky vrátí do ovladače ODBC 17.
Note
Ovladač ODBC 18 ve výchozím nastavení povolí Encrypt=yes a ověří certifikát serveru. Připojení, která fungovala s Driver 17, mohou selhat kvůli chybě důvěryhodnosti SSL/TLS. Řešení chyby:
- Pro místní SQL Server nainstalujte certifikát serveru z certifikační autority, které už klienti důvěřují, nebo stávající certifikát serveru naimportujte do každého úložiště důvěryhodnosti klienta. Pokyny najdete v tématu Konfigurace Databázový stroj systému SQL Server pro šifrování připojení.
- Pokud se připojíte podle IP adresy nebo aliasu, který neodpovídá předmětu certifikátu nebo alternativnímu názvu subjektu (SAN), přidejte
HostNameInCertificate=<name-from-certificate>doextra_paramssouboru .
Informace o místním vývoji proti certifikátu s vlastním podpisem najdete TrustServerCertificate v části Další parametry ODBC.
Ovladač můžete explicitně zadat:
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",
},
},
}
V Linuxu můžete také zadat úplnou cestu ke knihovně ovladačů:
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 vs HOST
Můžete se připojit pomocí HOST názvu nebo názvu DSN (Název zdroje dat).
Připojit se k HOST
Většina konfigurací používá HOST nastavení přímo:
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",
},
},
}
Připojení pomocí DSN
Použijte pojmenované DSN nakonfigurované ve zdrojích dat ODBC:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"OPTIONS": {
"dsn": "MyDataSourceName",
},
},
}
Podpora FreeTDS
Chcete-li jako ovladač ODBC použít FreeTDS, nastavte host_is_server na Truehodnotu . To říká back-endu, aby místo vyhledávání názvu datového serveru používal HOST a PORT přímo v freetds.conf:
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,
},
},
}
Další informace o připojeních bez DSN pomocí FreeTDS najdete v uživatelské příručce FreeTDS.
Další parametry ODBC
Pomocí extra_params předejte další parametry připojovacího řetězce ODBC. Hodnota je řetězec oddělený středníkem připojený k připojovací řetězec:
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",
},
},
}
Toto nastavení se používá také pro Microsoft Entra ověřovací klíčová slova.
Caution
Používejte TrustServerCertificate=yes pouze pro místní vývoj s certifikáty podepsanými svým držitelem. Nepoužívejte ho v produkčním prostředí. Zakáže ověřování řetězce certifikátů a zvyšuje riziko útoku typu man-in-the-middle. Nainstalujte na server důvěryhodný certifikát a připojte se pomocí TrustServerCertificate=no.
Časové limity připojení a opakované pokusy
Konfigurace odolnosti připojení pomocí časového limitu a nastavení opakování:
| Option | Default | Description |
|---|---|---|
connection_timeout |
0 (zakázáno) |
Maximální počet sekund čekání na připojení |
connection_retries |
5 |
Počet opakovaných pokusů o selhání připojení |
connection_retry_backoff_time |
5 |
Sekundy čekání mezi opakovanými pokusy. |
query_timeout |
0 (zakázáno) |
Maximální počet sekund čekání na dokončení dotazu |
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
Nastavte vlastní kolaci pro vyhledávání v textových polích:
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",
},
},
}
Více databázových připojení
Django podporuje připojení k více databázím současně. To je užitečné například pro repliky určené ke čtení, dotazy mezi databázemi nebo oddělení pracovních zátěží podle úrovně izolace.
Konfigurace více databází
Definujte každé připojení v DATABASES nastavení:
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 umožňuje špinavé čtení. Tuto úroveň izolace použijte pouze pro dotazy pro účely sestav nebo analýz, u nichž není vyžadována absolutní přesnost. Další informace naleznete v tématu Správa transakcí.
Směrování dotazů pomocí směrovače databáze
Vytvořte směrovač databáze pro přímé operace čtení a zápisu do příslušného připojení:
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"
Zaregistrujte směrovač v settings.py:
DATABASE_ROUTERS = ["myproject.routers.ReadReplicaRouter"]
Uložte třídu směrovače do souboru, například myproject/routers.py.
Dotazování konkrétní databáze přímo
Použijte metodu using() k dotazování konkrétního aliasu databáze:
# 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)
Další informace o úrovních izolace v databázích pro jednotlivá připojení viz Čtení dat bez blokování.