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?
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.