Wybierz sterownik bazy danych dla mssql-django

Od wersji 2.0 łączy się mssql-django za pomocą jednego z dwóch sterowników bazy danych Python:

  • pyodbc z zewnętrznie zainstalowanym sterownikiem Microsoft ODBC dla SQL Server. Ten sterownik jest domyślny.
  • mssql-python, sterownik Python od Microsoft, który nie wymaga osobno zainstalowanego sterownika ODBC.

Wybierasz sterownik dla każdego aliasu bazy danych. Jeden alias może używać mssql-python, podczas gdy reszta projektu nadal używa pyodbc. Wartość ENGINE pozostaje "mssql" w obu przypadkach.

Wybierz alias do mssql-python

Ustaw opcję python_driver w słowniku OPTIONS tego aliasu:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<database>",
        "USER": "<user_id>",
        "PASSWORD": "<password>",
        "HOST": "<server>.database.windows.net",
        "PORT": "1433",
        "OPTIONS": {
            "python_driver": "mssql_python",
            "extra_params": "Encrypt=yes",
        },
    },
}

Backend akceptuje "mssql_python", "mssql-python", oraz "python", a porównanie ignoruje przypadek. Pomiń python_driver, zostaw pusty lub ustaw tak, "pyodbc" aby zachował domyślny sterownik. Ponieważ ustawienie jest oparte na aliasie, cofasz się po jednej bazie danych na raz, usuwając tę opcję.

Moduł mssql-python jest importowany tylko wtedy, gdy alias go wybierze. Jeśli zainstalowana wersja jest starsza niż 1.15.0, backend zgłasza ImproperlyConfigured z wymaganą wersją.

Wymagania dotyczące instalacji

pip install mssql-django Instaluje oba sterowniki. Ścieżka mssql-python nie ma oddzielnej instalacji sterownika ODBC. Instalacja z --no-deps lub prywatny indeks, który nie odzwierciedla mssql-python, powoduje brak pakietu, a alias nie działa podczas importu.

Zainstaluj wymagania platformowe dla mssql-python, w tym OpenSSL na macOS oraz wymagane biblioteki na Linuksie.

Ponieważ mssql-python jest to wymagana zależność, mssql-django wersja 2.0 instaluje się tylko na platformach posiadających kompatybilną dystrybucję mssql-python . Listę platform można znaleźć w artykule mssql-django support and lifecycle.

Różnice w zachowaniu

Oba sterowniki tworzą różne ciągi połączeń i eksponują różne słowa kluczowe połączenia. Przejrzyj tę sekcję, zanim zmienisz pseudonim.

Ustawienia połączenia

Setting pyodbc mssql-python
HOST i PORT Emitowane jako SERVER, SERVERNAME, lub SERVER plus PORT, w zależności od sterownika i host_is_server. Zawsze emitowany jako SERVER=<host>,<port>. Pusty HOST staje się localhost.
driver Wybiera sterownik ODBC. Domyślnie używa sterownika Microsoft ODBC 18 dla SQL Server, z automatycznym powrotem do sterownika 17. Ignorowane. Nie ma mechanizmu przełączenia awaryjnego na Driver 17.
dsn Supported. Ignorowane.
host_is_server Obsługiwane dla FreeTDS. Ignorowane.
unicode_results Supported. Ignorowane.
TOKEN Supported. Supported. Podaj TOKEN bez USER, PASSWORD ani słowa kluczowego Authentication. Twoja aplikacja uzyskuje i odnawia token.
DATABASE_CONNECTION_POOLING Dotyczy. Ma zastosowanie.

Limity czasu, ponowienia, poziom izolacji, sortowanie i return_rows_bulk_insert działają tak samo na obu ścieżkach.

Dodatkowe parametry połączenia

mssql-python 1.15 waliduje extra_params na podstawie listy dozwolonych i odrzuca wszystko, co poza nią. Obsługiwane słowa kluczowe to Authentication, Encrypt, TrustServerCertificate, HostnameInCertificate, ServerCertificate, ServerSPN, ConnectRetryCount, ApplicationIntent, MultiSubnetFailover, KeepAlive, KeepAliveInterval, ConnectRetryInterval, IpAddressPreference oraz PacketSize.

Sterownik odrzuca MARS_Connection, APP, LongAsMax oraz ColumnEncryption, a także słowa kluczowe używane wyłącznie przez pyodbc, takie jak WSID, AnsiNPW, QuotedId, Current Language, Description, Network Library, Regional, UseFMTONLY, Connect Timeout, SERVERNAME, DSN oraz DRIVER. Usuń te słowa kluczowe przed zmianą aliasu i użyj connection_timeout opcji zamiast .Connect Timeout

Gdy extra_params ustawia słowo kluczowe, które backend również generuje, pierwszeństwo ma wartość ustawiona jawnie.

Wiele aktywnych zestawów wyników

Na ścieżce pyodbc backend dodaje MARS_Connection=yes, gdy alias używa sterownika ODBC firmy Microsoft w systemie Windows. Zamiast tego honorowana jest MARS_Connection wyraźna wartość w , extra_params a dopasowanie ignoruje przypadek.

Ścieżka mssql-python nigdy nie włącza MARS i odrzuca słowo kluczowe MARS_Connection, więc nie można włączyć MARS dla tego aliasu.

Bez MARS-a QuerySet.iterator() wczytuje cały zestaw wyników do pamięci, zanim zacznie zwracać wiersze, aby zagnieżdżone zapytanie mogło ponownie użyć tego samego połączenia, a chunk_size tego nie zmienia. Uwzględnij koszt pamięci w dużych zestawach zapytań.

Dla punktów końcowych, które odrzucają MARS, takich jak Microsoft Fabric Warehouse, zobacz Wyłącz MARS.

Konfiguracja kodowania

Oba sterowniki akceptują setencoding i setdecoding, a każdy wpis prowadzi do metody połączenia wybranego sterownika. Każdy setdecoding wpis wymaga klucza sqltype na obu ścieżkach, a ten sam wpis działa na obu sterownikach. Jedna różnica: mssql-python akceptuje -99 dla SQL_WMETADATA, i pyodbc odrzuca ją.

Wybierz spośród kierowców

W przypadku nowego programowania użyj polecenia mssql-python. Usuwa on krok instalacji sterownika ODBC z obrazów kontenerów i wdrożeń usług aplikacji.

Używaj pyodbc, gdy wdrożenie zależy od nazwanego DSN, FreeTDS, funkcji Always Encrypted za pośrednictwem słowa kluczowego ColumnEncryption, wersji sterownika ODBC, którą zarządzasz samodzielnie, lub MARS. Aby dowiedzieć się, czego MARS wymaga na każdej ścieżce, zobacz Multiple Active Results Sets.

Istniejące projekty mogą pozostać aktywne pyodbc. Pozostaje domyślną i w pełni obsługiwaną. Gdy już zaczniesz migrację, przełączaj aliasy po jednym i uruchamiaj dla każdego z nich zestaw testów, zanim przełączysz pozostałe.