En este artículo se responden las preguntas más frecuentes sobre el mssql-django back-end de Django para SQL Server, Azure SQL Database, Azure SQL Managed Instance y SQL Database en Microsoft Fabric.
General
¿Qué es mssql-django?
El paquete mssql-django es un controlador de base de datos de Django para SQL Server mantenido por Microsoft. Permite que las aplicaciones Django se conecten a SQL Server, Azure SQL Database, Azure SQL Managed Instance y base de datos SQL en Microsoft Fabric. La versión 2.0 y versiones posteriores se conectan ya sea mediante el pyodbc controlador, que es el predeterminado, o el controlador de mssql-python Microsoft.
Instálelo con pip:
pip install mssql-django
¿Qué versiones de Django admite mssql-django?
La mssql-django versión del paquete 2.0 soporta Django 5.2, 6.0 y 6.1. Los proyectos en Django 3.2 a 5.1 permanecen en la versión 1.8.0. Consulte el ciclo de vida de soporte para consultar la matriz de compatibilidad completa.
¿Qué versiones de Python se admiten?
La mssql-django versión 2.0 del paquete soporta Python 3.10 a 3.14. La versión específica de Python también debe ser compatible con tu versión de Django: Django 5.2 se prueba con Python 3.10 a 3.13, y Django 6.0 y 6.1 se prueban con Python 3.12 a 3.14. Consulte Ciclo de vida de soporte técnico para obtener la matriz de compatibilidad completa.
¿Qué controlador de base de datos de Python utiliza mssql-django?
La versión 2.0 y versiones posteriores soportan dos controladores, seleccionados para cada alias de base de datos.
pyodbces el predeterminado y necesita un controlador Microsoft ODBC instalado externamente para SQL Server. Para usar en su lugar el controlador mssql-python de Microsoft, que no requiere instalar un controlador ODBC por separado, añadir python_driver al diccionario OPTIONS de ese alias:
"OPTIONS": {
"python_driver": "mssql_python",
},
Los alias que omiten la opción siguen usando pyodbc. Para las diferencias de comportamiento entre ambos caminos, véase Seleccionar el controlador de base de datos para mssql-django.
¿Mssql-django se mantiene por Microsoft?
Configuración
¿Qué valor de ENGINE uso en settings.py?
Establezca ENGINE en "mssql" en la configuración de DATABASES:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"HOST": "<your-server>",
},
}
¿Qué controlador ODBC debo usar?
En la ruta predeterminadapyodbc, usa el controlador ODBC 18 de Microsoft para SQL Server. Es el predeterminado, y el backend automáticamente vuelve al controlador ODBC 17 si la versión 18 no está instalada. Especifica explícitamente el controlador en el diccionario OPTIONS solo si necesitas fijar una versión concreta, lo que también desactiva el mecanismo de reserva:
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
La ruta mssql-python ignora la opción driver y usa ODBC Driver 18, que pip instala junto con él.
¿Cómo puedo conectarme a Azure SQL Database?
Use el nombre completo del servidor en el puerto 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",
},
},
}
¿Cómo se usa la autenticación Microsoft Entra?
Usa extra_params en OPTIONS o la configuración TOKEN. La TOKEN configuración funciona con cualquier azure.identity credencial, incluido DefaultAzureCredential y ManagedIdentityCredential.
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token
"TOKEN": token,
Consulte Microsoft Entra autenticación para todos los métodos admitidos.
Características
¿Admite mssql-django JSONField?
Sí, JSONField se admite en SQL Server 2016 y versiones posteriores. Los datos JSON se almacenan como nvarchar(max) y se consultan mediante las funciones JSON de SQL Server. Consulte Compatibilidad con JSONField para ver las búsquedas y limitaciones admitidas.
¿Mssql-django admite datetimes con reconocimiento de zona horaria?
Yes. Cuando USE_TZ=True, Django usa el tipo de datos datetimeoffset en SQL Server. Si va a migrar una base de datos existente, debe modificar las columnas datetime2 existentes. Consulte Compatibilidad con zonas horarias.
¿Puedo llamar a procedimientos almacenados?
Yes. Úselo connection.cursor() con cursor.execute() para llamar a procedimientos almacenados. Consulte Procedimientos almacenados para obtener ejemplos, incluidos varios parámetros y conjuntos de resultados.
¿Devuelve bulk_create identificadores?
De forma predeterminada, no. La return_rows_bulk_insert opción tiene Falsecomo valor predeterminado . Configúrelo como True en su base de datos OPTIONS para habilitar la devolución de identificadores después de la inserción masiva. Esta opción debe permanecer False para las tablas con desencadenadores. Consulte Operaciones masivas.
Troubleshooting
Obtengo "Odbc Driver not found" (No se encontró el controlador ODBC). ¿Cómo puedo corregirlo?
Instale el controlador ODBC de Microsoft para SQL Server. En Linux, agregue primero el repositorio de Microsoft APT y, a continuación, instale el controlador:
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
En Windows, descargue el instalador desde el sitio web de Microsoft. En macOS, use Homebrew:
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18
Consulte Instalación para obtener instrucciones completas específicas de la plataforma.
¿Por qué se produce un error en la migración con "No se puede modificar la IDENTITY columna"?
SQL Server no admite la modificación de una columna hacia o desde una IDENTITY columna (AutoField). Cree un nuevo modelo con el tipo de campo deseado y migre los datos manualmente. Consulte Limitaciones y características no admitidas en mssql-django.
¿Por qué bulk_update produce un error con campos que aceptan valores NULL?
El backend gestiona automáticamente las actualizaciones totalmente NULL. Si necesitas controlar el valor del marcador de posición, usa el parámetro default en bulk_update, que mantiene NULL fuera de las expresiones CASE WHEN ... THEN NULL que causan errores de inferencia de tipos de SQL Server:
Product.objects.bulk_update(products, ["description"], default="")
Consulte Operaciones masivas para obtener más información.