mssql-django – nejčastější dotazy

Tento článek odpovídá na nejčastější dotazy týkající se back-endu mssql-django Django pro SQL Server, Azure SQL Database, Azure SQL Managed Instance a databázi SQL v Microsoft Fabric.

Obecné

Co je mssql-django?

Balíček mssql-django je back-end databáze Django spravovaný Microsoft pro SQL Server. Umožňuje aplikacím Django připojit se k SQL Server, Azure SQL Database, Azure SQL Managed Instance a SQL databázím v Microsoft Fabric. Verze 2.0 a pozdější verze se připojují prostřednictvím ovladače pyodbc, který je výchozí, nebo ovladače mssql-python od Microsoftu.

Nainstalujte ho pomocí pip:

pip install mssql-django

Jaké verze Django podporuje mssql-django?

Verze balíčku mssql-django 2.0 podporuje Django 5.2, 6.0 a 6.1. Projekty na Django 3.2 až 5.1 zůstávají na verzi 1.8.0. Zkontrolujte životní cyklus podpory pro úplnou matici kompatibility.

Jaké verze Python se podporují?

Verze mssql-django balíčku 2.0 podporuje Python 3.10 až 3.14. Konkrétní verze Python musí být také kompatibilní s vaší verzí Django: Django 5.2 se testuje s Python 3.10 až 3.13 a Django 6.0 a 6.1 s Python 3.12 až 3.14. Viz životní cyklus podpory pro úplnou matici kompatibility.

Jaký ovladač Python databáze používá mssql-django?

Verze 2.0 a pozdější verze podporují dva ovladače, vybrané pro každý alias databáze. pyodbcje výchozí a vyžaduje externě nainstalovaný Microsoft ODBC ovladač pro SQL Server. Pokud chcete použít ovladač od Microsoftmssql-python, který nevyžaduje samostatnou instalaci ovladače ODBC, přidejte python_driver do slovníku OPTIONS tohoto aliasu:

"OPTIONS": {
    "python_driver": "mssql_python",
},

Aliasy, které neobsahují tuto možnost, nadále používají pyodbc. Pro rozdíly v chování mezi těmito dvěma cestami viz Vybrat ovladač databáze pro mssql-django.

Udržuje Microsoft mssql-django?

Yes. Balíček mssql-django udržuje Microsoft a je k dispozici na PyPI a GitHub.

Konfigurace

Jakou hodnotu ENGINE mám použít v settings.py?

Nastavte v konfiguraci ENGINE položku "mssql" na DATABASES:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "HOST": "<your-server>",
    },
}

Který ovladač ODBC mám použít?

Ve výchozí pyodbc cestě použijte Microsoft ODBC Driver 18 pro SQL Server. Je to výchozí nastavení a backend automaticky přejde na ODBC Driver 17, pokud není verze 18 nainstalována. Ovladač explicitně zadejte ve slovníku OPTIONS pouze v případě, že potřebujete pevně určit konkrétní verzi, čímž se také vypne záložní mechanismus:

"OPTIONS": {
    "driver": "ODBC Driver 18 for SQL Server",
},

Cesta mssql-python ignoruje volbu driver a používá ovladač ODBC 18, který se nainstaluje spolu s pip.

Jak se připojím k Azure SQL Database?

Použijte plně kvalifikovaný název serveru s portem 1433:

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",
        },
    },
}

Jak používat ověřování Microsoft Entra?

Použijte extra_params v OPTIONS nebo v nastavení TOKEN. Toto TOKEN nastavení funguje s libovolnými azure.identity přihlašovacími údaji, včetně DefaultAzureCredential a ManagedIdentityCredential.

from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token

"TOKEN": token,

Všechny podporované metody najdete v článku ověřování Microsoft Entra.

Features

Podporuje mssql-django JSONField?

Ano, JSONField podporuje se v SQL Server 2016 a novějších verzích. Data JSON se ukládají jako nvarchar(max) a dotazuje se pomocí funkcí JSON SQL Server. Informace o podporovaných vyhledáváních a omezeních najdete v tématu Podpora JSONField .

Podporuje mssql-django data a časy s informací o časovém pásmu?

Yes. Když USE_TZ=TrueDjango používá datový typ datetimeoffset v SQL Server. Pokud migrujete existující databázi, musíte změnit existující sloupce datetime2 . Viz podpora časových pásem.

Můžu volat uložené procedury?

Yes. Použijte connection.cursor() s cursor.execute() k volání uložených procedur. Příklady, včetně více parametrů a sad výsledků, najdete v části Uložené procedury .

Vrací bulk_create identifikátory?

Ve výchozím nastavení ne. Možnost return_rows_bulk_insert má výchozí hodnotu False. Nastavte to na True ve vaší databázi OPTIONS, aby se po hromadném vložení vracela ID. Tato možnost musí zůstat False u tabulek s triggery. Viz Hromadné operace.

Troubleshooting

Zobrazuje se mi zpráva „Ovladač ODBC nebyl nalezen.“ Jak ji opravím?

Nainstalujte ovladač MICROSOFT ODBC pro SQL Server. V Linuxu nejprve přidejte úložiště Microsoft APT a pak nainstalujte ovladač:

curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
curl -fsSL https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
ACCEPT_EULA=Y sudo apt-get install -y msodbcsql18

Na Windows stáhněte instalační program z webu Microsoft. V systému macOS použijte Homebrew:

brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18

Kompletní pokyny pro konkrétní platformu najdete v tématu Instalace .

Proč migrace selže s chybou "Nejde změnit IDENTITY sloupec"?

SQL Server nepodporuje změnu sloupce na sloupec IDENTITY (AutoField) nebo ze sloupce IDENTITY (AutoField). Vytvořte nový model s požadovaným typem pole a migrujte data ručně. Viz Omezení a nepodporované funkce v mssql-django.

Proč bulk_update selhává u nulovatelných polí?

Backend automaticky zpracovává aktualizace, v nichž jsou všechny hodnoty NULL. Pokud potřebujete řídit hodnotu zástupného symbolu, použijte parametr default v bulk_update, který zachová NULL mimo výrazy CASE WHEN ... THEN NULL, jež způsobují chyby odvozování typů v SQL Serveru:

Product.objects.bulk_update(products, ["description"], default="")

Podrobnosti najdete v části Hromadné operace.