Dieser Artikel beantwortet häufig gestellte Fragen zum mssql-django Django-Back-End für SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL-Datenbank in Microsoft Fabric.
General
Was ist mssql-django?
Das mssql-django Paket ist ein Microsoft verwaltetes Django-Datenbank-Back-End für SQL Server. Es ermöglicht Django-Anwendungen, sich mit SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric zu verbinden. Version 2.0 und neuere Versionen verbinden sich entweder über den pyodbc Treiber, der der Standardtreiber ist, oder über mssql-python den Treiber von Microsoft.
Installieren Sie es mit Pip:
pip install mssql-django
Welche Versionen von Django unterstützt mssql-django?
Die mssql-django Paketversion 2.0 unterstützt Django 5.2, 6.0 und 6.1. Projekte auf Django 3.2 bis 5.1 bleiben auf Version 1.8.0. Überprüfen Sie den Supportlebenszyklus für die vollständige Kompatibilitätsmatrix.
Welche Versionen von Python werden unterstützt?
Das mssql-django Paket Version 2.0 unterstützt Python 3.10 bis 3.14. Die spezifische Python-Version muss ebenfalls mit deiner Django-Version kompatibel sein: Django 5.2 wird mit Python 3.10 bis 3.13 getestet, und Django 6.0 und 6.1 mit Python 3.12 bis 3.14. Siehe Supportlebenszyklus für die vollständige Kompatibilitätsmatrix.
Welchen Python-Datenbanktreiber verwendet mssql-django?
Version 2.0 und spätere Versionen unterstützen zwei Treiber, die für jedes Datenbankalias ausgewählt werden.
pyodbcist der Standard und benötigt einen extern installierten Microsoft ODBC-Treiber für SQL Server. Um stattdessen Microsofts mssql-python-Treiber zu verwenden, für den keine separate ODBC-Treiberinstallation erforderlich ist, fügen Sie OPTIONS zu dem python_driver-Dictionary dieses Alias hinzu:
"OPTIONS": {
"python_driver": "mssql_python",
},
Aliasse, die die Option weglassen, verwenden weiterhin pyodbc. Für die Verhaltensunterschiede zwischen den beiden Pfaden siehe Select the database driver for mssql-django.
Wird mssql-django von Microsoft gewartet?
Konfiguration
Welchen ENGINE-Wert verwende ich in settings.py?
Setzen Sie ENGINE in Ihrer "mssql"-Konfiguration auf DATABASES:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>",
},
}
Welchen ODBC-Treiber sollte ich verwenden?
Auf dem Standardpfad pyodbc verwenden Sie Microsoft ODBC Driver 18 für SQL Server. Das ist der Standard, und das Backend fällt automatisch auf ODBC-Treiber 17 zurück, wenn Version 18 nicht installiert ist. Gib den Treiber nur dann explizit im OPTIONS-Wörterbuch an, wenn du ihn auf eine bestimmte Version festlegen musst, wodurch auch der Fallback deaktiviert wird:
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
Der Pfad mssql-python ignoriert die Option driver und verwendet den ODBC-Treiber 18, den pip mitinstalliert.
Wie kann ich eine Verbindung mit Azure SQL-Datenbank herstellen?
Verwenden Sie den vollqualifizierten Servernamen mit Port 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",
},
},
}
Wie verwende ich Microsoft Entra Authentifizierung?
Verwenden Sie extra_params in OPTIONS oder in der Einstellung TOKEN. Die TOKEN Einstellung funktioniert mit allen azure.identity Anmeldeinformationen, einschließlich DefaultAzureCredential und ManagedIdentityCredential.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token
"TOKEN": token,
Weitere Informationen finden Sie unter Microsoft Entra Authentifizierung für alle unterstützten Methoden.
Funktionen
Unterstützt mssql-django JSONField?
Ja, JSONField wird auf SQL Server 2016 und höher unterstützt. JSON-Daten werden als nvarchar(max) gespeichert und mithilfe der JSON-Funktionen von SQL Server abgefragt. Siehe JSONField-Unterstützung für unterstützte Nachschlagevorgänge und Einschränkungen.
Unterstützt mssql-django Datums- und Uhrzeitwerte mit Zeitzoneninformationen?
Ja. Wenn USE_TZ=True, Django verwendet den Datetimeoffset-Datentyp in SQL Server. Wenn Sie eine vorhandene Datenbank migrieren, müssen Sie vorhandene Datetime2-Spalten ändern. Siehe Zeitzonenunterstützung.
Kann ich gespeicherte Prozeduren aufrufen?
Ja.
connection.cursor() mit cursor.execute() verwenden, um gespeicherte Prozeduren aufzurufen. Beispiele für gespeicherte Prozeduren, einschließlich mehrerer Parameter und Resultsets, finden Sie unter "Gespeicherte Prozeduren ".
Gibt bulk_create IDs zurück?
Standardmäßig nein. Die return_rows_bulk_insert-Option ist standardmäßig auf False festgelegt. Setzen Sie dies in Ihrer Datenbank True auf OPTIONS, um die Rückgabe von IDs nach einer Masseneinfügung zu ermöglichen. Diese Option muss für Tabellen mit Triggern verbleiben False . Siehe Massenvorgänge.
Problembehandlung
Ich bekomme die Meldung „ODBC-Treiber nicht gefunden“. Wie behebe ich das Problem?
Installieren Sie den Microsoft ODBC-Treiber für SQL Server. Fügen Sie unter Linux zuerst das Microsoft APT-Repository hinzu, und installieren Sie dann den Treiber:
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
Laden Sie auf Windows das Installationsprogramm von der Microsoft-Website herunter. Verwenden Sie unter macOS Homebrew:
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18
Eine vollständige plattformspezifische Anleitung finden Sie unter "Installation ".
Warum schlägt meine Migration mit „Die Spalte IDENTITY kann nicht geändert werden“ fehl?
SQL Server unterstützt das Ändern einer Spalte in oder von einer IDENTITY Spalte (AutoField) nicht. Erstellen Sie ein neues Modell mit dem gewünschten Feldtyp, und migrieren Sie Daten manuell. Siehe Einschränkungen und nicht unterstützte Features in mssql-django.
Warum schlägt bulk_update mit nullfähigen Feldern fehl?
Das Backend verarbeitet alle NULL-Updates automatisch. Wenn Sie den Platzhalterwert steuern müssen, verwenden Sie den default-Parameter in bulk_update, der NULL aus CASE WHEN ... THEN NULL-Ausdrücken heraushält, die zu SQL Server-Typinferenzfehlern führen:
Product.objects.bulk_update(products, ["description"], default="")
Weitere Details finden Sie unter Massenoperationen.