Questo articolo risponde alle domande frequenti sul mssql-django back-end Django per SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure e database SQL in Microsoft Fabric.
General
Che cos'è mssql-django?
Il mssql-django pacchetto è un back-end del database Django gestito Microsoft per SQL Server. Permette alle applicazioni Django di connettersi a SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure e database SQL in Microsoft Fabric. La versione 2.0 e le versioni successive si collegano tramite il pyodbc driver, che è il predefinito, oppure tramite il driver di mssql-python Microsoft.
Installalo con pip:
pip install mssql-django
Quali versioni di Django supporta mssql-django?
La mssql-django versione 2.0 del pacchetto supporta Django 5.2, 6.0 e 6.1. I progetti su Django dalla 3.2 alla 5.1 rimangono sulla versione 1.8.0. Controllare il ciclo di vita del supporto per la matrice di compatibilità completa.
Quali versioni di Python sono supportate?
La mssql-django versione 2.0 del pacchetto supporta Python 3.10 fino a 3.14. La versione specifica di Python deve essere compatibile anche con la tua versione Django: Django 5.2 viene testato con Python 3.10 fino a 3.13, mentre Django 6.0 e 6.1 sono testati con Python 3.12 fino a 3.14. Vedere Ciclo di vita del supporto per la matrice di compatibilità completa.
Quale driver di database Python usa mssql-django?
La versione 2.0 e le versioni successive supportano due driver, selezionati per ciascun alias di database.
pyodbcè il predefinito e richiede un driver Microsoft ODBC installato esternamente per SQL Server. Per usare invece il driver Microsoft mssql-python, che non richiede un'installazione separata del driver ODBC, aggiungi python_driver al dizionario OPTIONS di quell'alias:
"OPTIONS": {
"python_driver": "mssql_python",
},
Gli alias che omettono l'opzione continuano a usare pyodbc. Per le differenze di comportamento tra i due percorsi, vedi Seleziona il driver del database per mssql-django.
Mssql-django viene gestito da Microsoft?
Configuration
Quale valore ENGINE devo usare in settings.py?
Imposta ENGINE su "mssql" nella configurazione DATABASES:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>",
},
}
Quale driver ODBC è necessario usare?
Sul percorso predefinitopyodbc, usa il driver ODBC 18 di Microsoft per SQL Server. È il valore predefinito, e il backend torna automaticamente al driver ODBC 17 se la versione 18 non è installata. Specifica esplicitamente il driver nel OPTIONS dizionario solo se devi fissare una versione specifica, che disattiva anche il fallback:
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
Il percorso mssql-python ignora l'opzione driver e utilizza il driver ODBC 18 che viene installato con pip.
Come ci si connette ad database SQL di Azure?
Usare il nome completo del server con la porta 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",
},
},
}
Come si usa l'autenticazione Microsoft Entra?
Usare extra_params in OPTIONS o l'impostazione TOKEN. L'impostazione TOKEN funziona con qualsiasi azure.identity credenziale, tra cui DefaultAzureCredential e ManagedIdentityCredential.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token
"TOKEN": token,
Vedi l'autenticazione di Microsoft Entra per tutti i metodi di autenticazione supportati.
Features
mssql-django supporta il JSONField?
Sì, JSONField è supportato in SQL Server 2016 e versioni successive. I dati JSON vengono archiviati come nvarchar(max) e sottoposti a query usando le funzioni JSON di SQL Server. Consulta il supporto di JSONField per i lookup supportati e le relative limitazioni.
Mssql-django supporta datetime con riconoscimento del fuso orario?
Yes. Quando USE_TZ=True, Django usa il tipo di dati datetimeoffset in SQL Server. Se si esegue la migrazione di un database esistente, è necessario modificare le colonne datetime2 esistenti. Vedere Supporto del fuso orario.
Posso chiamare procedure memorizzate?
Yes. Usa connection.cursor() con cursor.execute() per chiamare le stored procedure. Vedere Stored procedure per esempi che includono più parametri e set di risultati.
Bulk_create restituisce gli ID?
Per impostazione predefinita, no. Per impostazione predefinita, l'opzione return_rows_bulk_insert è False. Impostalo su True nel tuo database OPTIONS per abilitare la restituzione degli ID dopo l'inserimento in blocco. Questa opzione deve rimanere False per le tabelle con trigger. Vedi Operazioni in blocco.
Troubleshooting
Ricevo il messaggio "ODBC Driver not found." Come è possibile correggerlo?
Installare il driver ODBC Microsoft per SQL Server. In Linux aggiungere prima il repository APT Microsoft e quindi installare il driver:
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
In Windows scaricare il programma di installazione dal sito Web di Microsoft. In macOS usare Homebrew:
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18
Vedere Installazione per istruzioni complete specifiche della piattaforma.
Perché la migrazione non riesce con "Non è possibile modificare IDENTITY la colonna"?
SQL Server non supporta la modifica di una colonna da o verso una IDENTITY colonna (Campo automatico). Creare un nuovo modello con il tipo di campo desiderato ed eseguire la migrazione manuale dei dati. Vedere Limitazioni e funzionalità non supportate in mssql-django.
Perché bulk_update non funziona con campi nulli?
Il backend gestisce automaticamente gli aggiornamenti completamente NULL. Se devi controllare il valore del segnaposto, usa il parametro default in bulk_update, che mantiene NULL al di fuori delle espressioni CASE WHEN ... THEN NULL che causano errori di inferenza del tipo di SQL Server:
Product.objects.bulk_update(products, ["description"], default="")
Per maggiori dettagli, vedere Operazioni in blocco.