mssql-django — często zadawane pytania

Ten artykuł zawiera odpowiedzi na często zadawane pytania dotyczące zaplecza mssql-django Django dla SQL Server, Azure SQL Database, Azure SQL Managed Instance i bazy danych SQL w usłudze Microsoft Fabric.

Ogólne

Co to jest mssql-django?

Pakiet mssql-django to Microsoft obsługiwane zaplecze bazy danych Django dla SQL Server. Pozwala aplikacjom Django łączyć się z SQL Server, Azure SQL Database, Azure SQL Managed Instance oraz bazą danych SQL w Microsoft Fabric. Wersje 2.0 i późniejsze łączą się albo przez sterownik, pyodbc który jest domyślny, albo przez sterownik Microsoftmssql-python.

Zainstaluj go za pomocą narzędzia pip:

pip install mssql-django

Jakie wersje platformy Django obsługuje program mssql-django?

Wersja pakietu mssql-django 2.0 obsługuje Django 5.2, 6.0 i 6.1. Projekty oparte na Django od wersji 3.2 do 5.1 pozostają w wersji 1.8.0. Zapoznaj się z cyklem życia wsparcia, aby uzyskać pełną macierz zgodności.

Jakie wersje Python są obsługiwane?

Pakiet mssql-django w wersji 2.0 obsługuje Python od 3.10 do 3.14. Konkretna wersja Python musi być również kompatybilna z wersją Django: Django 5.2 jest testowane w Python 3.10 do 3.13, a Django 6.0 i 6.1 testowane są z Python 3.12 do 3.14. Zobacz Cykl życia wsparcia, aby uzyskać pełną macierz zgodności.

Jakiego sterownika bazy danych Python używa mssql-django?

Wersje 2.0 i późniejsze obsługują dwa sterowniki, wybierane dla każdego aliasu bazy danych. pyodbcjest domyślną i wymaga zewnętrznego zainstalowanego sterownika Microsoft ODBC dla SQL Server. Aby zamiast tego użyć sterownika firmy Microsoft mssql-python, który nie wymaga osobnej instalacji sterownika ODBC, dodaj python_driver do słownika OPTIONS tego aliasu:

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

Aliasy, które pomijają tę opcję, nadal używają pyodbc. Różnice w zachowaniu między tymi ścieżkami można znaleźć w artykule Wybierz sterownik bazy danych dla mssql-django.

Czy program mssql-django jest obsługiwany przez Microsoft?

Yes. Pakiet mssql-django jest utrzymywany przez firmę Microsoft i jest dostępny w serwisach PyPI i GitHub.

Konfiguracja

Jakiej wartości ENGINE użyć w settings.py?

Ustaw ENGINE na "mssql" w konfiguracji DATABASES:

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

Którego sterownika ODBC należy użyć?

Na domyślnej pyodbc ścieżce użyj sterownika Microsoft ODBC 18 dla SQL Server. Jest to opcja domyślna, a backend automatycznie przechodzi na ODBC Driver 17, jeśli wersja 18 nie jest zainstalowana. Jawnie określ sterownik w słowniku OPTIONS tylko wtedy, gdy musisz wymusić konkretną wersję, co spowoduje również wyłączenie mechanizmu awaryjnego:

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

Ścieżka mssql-python ignoruje opcję driver i używa sterownika ODBC Driver 18, który jest instalowany przez pip.

Jak nawiązać połączenie z Azure SQL Database?

Użyj w pełni kwalifikowanej nazwy serwera z 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 używać uwierzytelniania Microsoft Entra?

Użyj extra_params w OPTIONS lub w ustawieniu TOKEN. Ustawienie TOKEN działa z dowolnymi azure.identity poświadczeniami, w tym DefaultAzureCredential i ManagedIdentityCredential.

from azure.identity import DefaultAzureCredential

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

"TOKEN": token,

Informacje o wszystkich obsługiwanych metodach znajdziesz w uwierzytelnianiu Microsoft Entra.

Features

Czy mssql-django obsługuje JSONField?

Tak, JSONField jest obsługiwany w SQL Server 2016 i nowszych. Dane JSON są przechowywane jako dane nvarchar(max) i są odpytywane przy użyciu funkcji JSON SQL Server. Zobacz obsługę JSONField, aby uzyskać informacje o obsługiwanych typach wyszukiwania i ograniczeniach.

Czy mssql-django obsługuje daty/godziny z obsługą strefy czasowej?

Yes. W przypadku USE_TZ=True, Django używa typu danych datetimeoffset w SQL Server. Jeśli migrujesz istniejącą bazę danych, musisz zmienić istniejące kolumny datetime2 . Zobacz Obsługa strefy czasowej.

Czy mogę wywołać procedury składowane?

Yes. Użyj polecenia connection.cursor() , cursor.execute() aby wywołać procedury składowane. Zobacz Procedury składowane , aby zapoznać się z przykładami, w tym wieloma parametrami i zestawami wyników.

Czy bulk_create zwraca identyfikatory?

Domyślnie nie. Opcja return_rows_bulk_insert jest domyślnie ustawiona na False. Ustaw ją na True w bazie danych OPTIONS , aby włączyć zwracanie identyfikatorów po wstawieniu zbiorczym. Ta opcja musi pozostać False w przypadku tabel z wyzwalaczami. Zobacz Operacje zbiorcze.

Troubleshooting

Otrzymuję komunikat "Nie znaleziono sterownika ODBC". Jak to naprawić?

Zainstaluj sterownik Microsoft ODBC dla SQL Server. W systemie Linux najpierw dodaj repozytorium Microsoft APT, a następnie zainstaluj sterownik:

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 pobierz instalator z witryny internetowej Microsoft. W systemie macOS użyj oprogramowania Homebrew:

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

Aby uzyskać pełne instrukcje specyficzne dla platformy, zobacz Instalacja .

Dlaczego migracja kończy się niepowodzeniem z komunikatem "Nie można zmienić IDENTITY kolumny"?

SQL Server nie obsługuje zmiany typu kolumny na IDENTITY (AutoField) ani z tego typu na inny. Utwórz nowy model z żądanym typem pola i ręcznie przeprowadź migrację danych. Zobacz Ograniczenia i nieobsługiwane funkcje w pliku mssql-django.

Dlaczego bulk_update nie działa z polami dopuszczającymi wartość NULL?

Backend automatycznie obsługuje aktualizacje, w których wszystkie wartości to NULL. Jeśli musisz kontrolować wartość zastępczą, użyj parametru default w bulk_update, który chroni NULL przed wyrażeniami CASE WHEN ... THEN NULL powodującymi błędy wnioskowania typu SQL Server:

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

Aby uzyskać szczegółowe informacje, zobacz Operacje zbiorcze .