Välj databasdrivrutinen för mssql-django

Från och med version 2.0 ansluter mssql-django man via någon av två Python-databasdrivrutiner:

  • pyodbc med en externt installerad Microsoft ODBC-drivrutin för SQL Server. Den här drivrutinen är standard.
  • mssql-python, Microsoft:s Python-drivrutin, som inte kräver en separat installerad ODBC-drivrutin.

Du väljer drivrutinen för varje databasalias. Ett alias kan användas mssql-python medan resten av projektet är på pyodbc. Värdet ENGINE förblir "mssql" i båda fallen.

Lägg till ett alias i mssql-python

Ställ in python_driver alternativet i det aliasets OPTIONS ordbok:

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 accepterar "mssql_python", "mssql-python", och "python", och jämförelsen ignorerar fall. Utelämna python_driver, lämna den tom, eller ställ in den på "pyodbc" att behålla standarddrivrutinen. Eftersom inställningen är per alias, rullar du tillbaka en databas i taget genom att ta bort alternativet.

Modulen mssql-python importeras endast när ett alias väljer den. Om den installerade versionen är äldre än 1.15.0 genererar backenden ImproperlyConfigured med den version som krävs.

Installationskrav

pip install mssql-django Installerar båda drivrutinerna. mssql-python-vägen kräver ingen separat installation av ODBC-drivrutinen. En --no-deps installation, eller ett privat index som inte speglar mssql-python, lämnar paketet saknat och aliaset misslyckas vid import.

Installera plattformskraven för mssql-python, inklusive OpenSSL på macOS och de nödvändiga biblioteken på Linux.

Eftersom mssql-python är ett nödvändigt beroende mssql-django installeras 2.0 endast på plattformar som har en kompatibel mssql-python distribution. För plattformslistan, se mssql-django-support och livscykel.

Beteendeskillnader

De två drivrutinerna bygger olika anslutningssträngar och exponerar olika anslutningsnyckelord. Gå igenom detta avsnitt innan du byter alias.

Anslutningsinställningar

Inställning pyodbc mssql-python
HOST och PORT Emitteras som SERVER, SERVERNAME, eller SERVER plus PORT, beroende på föraren och host_is_server. Alltid sänd ut som SERVER=<host>,<port>. Ett tomrum HOST blir localhost.
driver Väljer ODBC-drivrutinen. Använder som standard Microsoft ODBC Driver 18 for SQL Server, med automatisk återgång till Driver 17. Ignoreras. Det finns ingen reservlösning för Driver 17.
dsn Stöds. Ignoreras.
host_is_server Stöds för FreeTDS. Ignoreras.
unicode_results Stöds. Ignoreras.
TOKEN Stöds. Stöds. Ange TOKEN utan USER, PASSWORD eller nyckelordet Authentication. Din applikation hämtar och förnyar tokenen.
DATABASE_CONNECTION_POOLING Gäller. Gäller.

Timeouts, omförsök, isolationsnivå, sortering och return_rows_bulk_insert fungerar likadant i båda fallen.

Extra anslutningsparametrar

mssql-python 1.15 validerar extra_params mot en tillåtslista och avvisar allt utanför den. Stödda nyckelord inkluderar Authentication, Encrypt, TrustServerCertificate, HostnameInCertificate, ServerCertificate, ServerSPN, MultiSubnetFailover, ApplicationIntent, KeepAliveConnectRetryIntervalKeepAliveIntervalConnectRetryCountIpAddressPreferenceoch .PacketSize

Drivrutinen avvisar DRIVER, DSN, SERVERNAME och MARS_Connection, tillsammans med pyodbc-specifika nyckelord som APP, LongAsMax, ColumnEncryption, WSID, AnsiNPW, QuotedId, UseFMTONLY, Current Language, Network Library, Regional, Description och Connect Timeout. Ta bort dessa nyckelord innan du byter alias, och använd connection_timeout alternativet istället för Connect Timeout.

När extra_params anger ett nyckelord som serverdelen också genererar, är det det uttryckligen angivna värdet som gäller.

Flera aktiva resultatuppsättningar

På sökvägen pyodbc lägger backenden till MARS_Connection=yes när aliaset använder en Microsoft ODBC-drivrutin i Windows. Ett explicit MARS_Connection värde i extra_params respekteras istället, och matchningen ignorerar kasus.

Vägen mssql-python aktiverar aldrig MARS, och den avvisar MARS_Connection nyckelordet, så du kan inte slå på MARS för det aliaset.

Utan MARS läser QuerySet.iterator() in hela resultatet i minnet innan den returnerar rader, så att en kapslad fråga kan återanvända anslutningen, och chunk_size ändrar inte på det. Räkna med minneskostnaden på stora frågeuppsättningar.

För endpoints som avvisar MARS, såsom Microsoft Fabric Warehouse, se Inaktivera MARS.

Kodningskonfiguration

Båda drivrutinerna accepterar setencoding och setdecoding, och varje post går till anslutningsmetoden för den valda drivrutinen. Varje setdecoding post kräver en sqltype nyckel i båda sökvägarna, och samma post fungerar med båda drivrutinerna. En skillnad: mssql-python accepterar -99 för SQL_WMETADATA, och pyodbc avvisar det.

Välj mellan förarna

För ny utveckling använder du mssql-python. Det tar bort installationssteget för ODBC-drivrutiner från containeravbildningar och apptjänstdistributioner.

Använd pyodbc när din distribution beror på ett namngivet DSN, FreeTDS, Always Encrypted via ColumnEncryption nyckelordet, en ODBC-drivrutinsversion som du själv hanterar, eller MARS. Vad MARS kräver för varje sökväg finns i Multiple Active Result Sets.

Befintliga projekt kan stanna kvar.pyodbc Det är fortfarande standard och stöds fullt ut. När du flyttar, byt ett alias i taget och kör din testsvit mot det innan du flyttar resten.