Seleziona il driver del database per mssql-django

A partire dalla versione 2.0, mssql-django si collega tramite uno dei due driver di database Python:

  • pyodbc con un driver Microsoft ODBC installato esternamente per SQL Server. Questo driver è quello predefinito.
  • mssql-python, il driver Python di Microsoft, che non richiede un driver ODBC installato separatamente.

Scegli il driver per ogni alias del database. Un alias può utilizzare mssql-python mentre il resto del progetto rimane su pyodbc. Il ENGINE valore rimane "mssql" in entrambi i casi.

Aggiungi un alias a mssql-python

Imposta l'opzione python_driver nel dizionario di OPTIONS quell'alias:

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",
        },
    },
}

Il backend accetta "mssql_python", "mssql-python", e "python", e il confronto ignora il caso. Omettete python_driver, lasciatelo vuoto o impostatelo per "pyodbc" mantenere il driver predefinito. Poiché l'impostazione è per alias, puoi tornare indietro un database alla volta rimuovendo l'opzione.

Il mssql-python modulo viene importato solo quando viene selezionato da un alias. Se la versione installata è precedente alla versione 1.15.0, il backend genera ImproperlyConfigured con la versione richiesta.

Requisiti di installazione

pip install mssql-django Installa entrambi i driver. Il mssql-python percorso non ha un'installazione separata di driver ODBC. Un'installazione --no-deps, o un indice privato che non esegue il mirroring di mssql-python, fa sì che il pacchetto risulti assente e l'alias fallisca in fase di importazione.

Installa i prerequisiti della piattaforma per mssql-python, inclusi OpenSSL su macOS e le librerie richieste su Linux.

Poiché mssql-python è una dipendenza obbligatoria, mssql-django la versione 2.0 si installa solo su piattaforme che hanno una distribuzione compatibile mssql-python . Per la lista delle piattaforme, vedi supporto e ciclo di vita mssql-django.

Differenze di comportamento

I due driver costruiscono stringhe di connessione diverse ed espongono parole chiave di connessione differenti. Ripassa questa sezione prima di cambiare alias.

Impostazioni di connessione

Setting pyodbc mssql-python
HOST e PORT Generata come SERVER, SERVERNAME o SERVER, oltre a PORT, a seconda del driver e di host_is_server. Sempre emesso come SERVER=<host>,<port>. Un vuoto HOST diventa localhost.
driver Seleziona il driver ODBC. Per impostazione predefinita viene usato il Driver Microsoft ODBC 18 per SQL Server, con passaggio automatico al Driver 17. Ignorato. Non esiste alcuna alternativa a Driver 17.
dsn Supportato. Ignorato.
host_is_server Supportato per FreeTDS. Ignorato.
unicode_results Supportato. Ignorato.
TOKEN Supportato. Supportato. Fornisce TOKEN senza USER, PASSWORD, o una Authentication parola chiave. La tua applicazione acquisisce e rinnova il token.
DATABASE_CONNECTION_POOLING Si applica. Si applica.

Timeout, tentativi, livello di isolamento, regole di confronto e return_rows_bulk_insert si comportano allo stesso modo su entrambi i percorsi.

Parametri di connessione aggiuntivi

mssql-python La versione 1.15 convalida extra_params rispetto a un'allow list e rifiuta tutto ciò che non vi rientra. Le parole chiave supportate includono Authentication, Encrypt, TrustServerCertificate, ServerCertificateHostnameInCertificate, ServerSPN, MultiSubnetFailover, ApplicationIntent, ConnectRetryCount, ConnectRetryIntervalIpAddressPreferenceKeepAliveKeepAliveIntervalPacketSizee .

Il driver rifiuta MARS_Connection, APP, LongAsMax e ColumnEncryption, insieme a parole chiave specifiche di pyodbc come WSID, AnsiNPW, QuotedId, Description, Current Language, Connect Timeout, Network Library, UseFMTONLY, Regional, SERVERNAME, DSN e DRIVER. Rimuovi quelle parole chiave prima di cambiare alias e usa l'opzione connection_timeout al posto di Connect Timeout.

Quando extra_params viene impostata una parola chiave che il backend genera anch'esso, vince il valore esplicito.

Più set di risultati attivi

Nel percorso pyodbc, il backend aggiunge MARS_Connection=yes quando l'alias utilizza un driver ODBC Microsoft su Windows. Invece viene onorato un valore esplicito MARS_Connection in extra_params e la corrispondenza ignora il caso.

Il mssql-python percorso non abilita mai MARS e rifiuta la MARS_Connection parola chiave, quindi non puoi attivare MARS per quell'alias.

Senza MARS, QuerySet.iterator() legge il risultato completo in memoria prima di fornire righe, così che una query annidata possa riutilizzare la connessione e chunk_size non cambia questo. Tieni conto del consumo di memoria nei set di query di grandi dimensioni.

Per endpoint che rifiutano MARS, come Microsoft Fabric Warehouse, vedi Disabilita MARS.

Configurazione della codifica

Entrambi i driver accettano setencoding e setdecoding, e ogni voce va al metodo di connessione del driver selezionato. Ogni setdecoding voce richiede una sqltype chiave su entrambi i percorsi, e la stessa voce funziona su entrambi i driver. Una differenza: mssql-python accetta -99 per SQL_WMETADATA, e pyodbc lo rifiuta.

Scegli tra i piloti

Per i nuovi sviluppi, usare mssql-python. Elimina il passaggio di installazione dei driver ODBC dalle immagini dei container e dalle implementazioni dei servizi applicativi.

Usalo pyodbc quando il tuo deployment dipende da un DSN nominato, FreeTDS, Always Encrypted tramite la ColumnEncryption parola chiave, una versione del driver ODBC che gestisci tu stesso, o MARS. Per cosa richiede MARS su ogni percorso, vedi Multiple Active Result Sets.

I progetti esistenti possono rimanere attivi pyodbc. Rimane il predefinito ed è completamente supportato. Quando ti muovi, cambia un alias alla volta e fai partire la tua suite di test su di esso prima di spostare il resto.