mssql-django Häufig gestellte Fragen

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, eine Verbindung mit SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL-Datenbank in Microsoft Fabric mithilfe des Pyodbc-Treibers herzustellen.

Installieren Sie es mit Pip:

pip install mssql-django

Welche Versionen von Django unterstützt mssql-django?

Das mssql-django Paket v1.7 unterstützt Django 3.2, 4.0, 4.1, 4.2, 5.0, 5.1, 5.2 und 6.0. Überprüfen Sie den Supportlebenszyklus für die vollständige Kompatibilitätsmatrix.

Welche Versionen von Python werden unterstützt?

Das mssql-django Paket unterstützt Python 3.8 und höher. Die spezifische Python Version muss auch mit Ihrer Django-Version kompatibel sein. Beispielsweise erfordert Django 5.0 Python 3.10 und höher, und Django 6.0 erfordert Python 3.12 und höhere Versionen. Siehe Supportlebenszyklus für die vollständige Kompatibilitätsmatrix.

Wird mssql-django von Microsoft gewartet?

Ja. Das mssql-django Paket wird von Microsoft verwaltet und ist auf PyPI und GitHub verfügbar.

Konfiguration

Welchen ENGINE-Wert verwende ich in settings.py?

Setzen Sie ENGINE in Ihrer DATABASES-Konfiguration auf "mssql":

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

Welchen ODBC-Treiber sollte ich verwenden?

Verwenden Sie Microsoft ODBC-Treiber 18 für SQL Server. Dies ist die Standardeinstellung in mssql-django 1.7 und höher, und das Back-End greift automatisch auf ODBC-Treiber 17 zurück, wenn Version 18 nicht installiert ist. Geben Sie den Treiber nur dann explizit im Wörterbuch OPTIONS an, wenn Sie eine bestimmte Version festlegen müssen:

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

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 OPTIONS auf True, 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?

In mssql-django 1.7 verarbeitet das Back-End alle NULL-Updates automatisch. Verwenden Sie in früheren Versionen den Parameter default in bulk_update, um NULL in CASE WHEN ... THEN NULL-Ausdrücken zu vermeiden, die SQL-Server-Typinferenzfehler verursachen:

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

Weitere Details finden Sie unter Massenoperationen.