2009-05-09 41 views
36

¿Alguien tiene experiencia reciente en la implementación de una aplicación Django con una base de datos de SQL Server? Nuestro lugar de trabajo está fuertemente invertido en SQL Server y no admitirá Django si no cuenta con un back end suficientemente desarrollado para ello.Uso del servidor Sql con Django en producción

Conozco mssql.django-pyodbc y django-mssql como backend extraoficiales. Ambos proyectos parecen tener solo una persona contribuyendo, lo cual es un poco preocupante, aunque las contribuciones parecen ser algo regulares.

¿Hay otros backend para SQL Server que sean compatibles? ¿Los dos que mencioné aquí son "lo suficientemente buenos" para la producción? ¿Cuáles son tus experiencias?

Respuesta

19

Como se ha dicho, django-pyodbc es un buen camino a seguir. PyODBC es probablemente la biblioteca de SQL Server más madura que existe para Python.

Lo único que puede tener problemas es que pyodbc no es compatible con los procedimientos almacenados muy bien (puede llamarlos, pero no tiene forma de obtener resultados de ellos). Usted puede llamar al utilizando pymssql, pero lo evitaría si fuera posible, ya que no es compatible con la interfaz estándar DB-API y puede estar sujeto a cambios. Si necesita hacer esto, su mejor opción es usar adodbapi directamente (está incluido con el paquete python win32, que probablemente terminará instalando de todos modos).

+0

Gracias por 'adodbapi' - esta fue una nueva para mí. –

+0

django-mssql usa un tenedor de adodbapi y admite procedimientos almacenados. – Manfre

+2

Puede obtener los resultados de los procedimientos almacenados de SQLServer llamándolos de la siguiente manera: 'cursor.execute ('DECLARAR @resultados int; EXEC @ resultados = spMyProc; SELECCIONAR @resultados')' –

1

No lo he usado todavía en producción, pero mis experiencias iniciales con django-mssql han sido bastante sólidas. Todo lo que necesita son las extensiones de Python Win32 y obtener el módulo sqlserver_ado en su ruta de Python. A partir de ahí, solo usa sql_server.pyodbc como su DATABASE_ENGINE. Hasta ahora no he notado que falta nada, pero aún no lo he golpeado completamente.

4

Estamos utilizando django-mssql en producción en nuestra empresa. Nosotros también teníamos un sistema existente que usa mssql. Para mí, personalmente, fue la mejor decisión de diseño que haya tomado porque mi productividad aumentó dramáticamente ahora que puedo usar django.

Envié un parche pero cuando comencé a usar django-mssql e hice una semana o dos de pruebas. Desde entonces (octubre de 2008) ejecutamos nuestro sistema en django y se ejecuta de manera sólida. También probé Pyodbc pero no me gustó demasiado.

Estamos ejecutando un sistema de reparación donde todas las transacciones se ejecutan a través de este sistema 40 usuarios pesados. Si tienes más preguntas, házmelo saber.

+0

¿Está vinculado django-mssql a una versión particular de django? –

+7

django-mssql requiere que django se ejecute en Windows. ¿Qué hacer si uno está ejecutando django en Linux? –

+0

@Paul, tengo una base de datos de sybase a la que quiero conectar Django para solo seleccionar informes. ¿Puedo conectarme directamente a un DSN con django-mssql? – toasteez

4

que he visto tanta gente obtiene el siguiente error después de instalar django_mssql en Windows:

 
django.core.exceptions.ImproperlyConfigured: 'sqlserver_ado' isn't an available database backend. 
Try using django.db.backends.XXX, where XXX is one of: 
    'dummy', 'mysql', 'oracle', 'postgresql_psycopg2', 'sqlite3' 
Error was: No module named sqlserver_ado.base 

La solución es instalar el siguiente plugin:

http://sourceforge.net/projects/pywin32/

+1

Obtengo este error exacto en este momento, el enlace ya no es válido, ¿sabes dónde puedo obtener el complemento? –

+1

@DavidZhanLiu: son las extensiones de Python Win32 según el archivo web. Se movió a http://sourceforge.net/projects/pywin32/. – SaeX

5

Estos días

  • django-mssql: resultado por error "Ninguno Tipo no rescatable" al ./manage.py migrate
  • avidal/django-pyodbc: no mantenido.Sustituido por:
    • django-pyodbc: no hay soporte para Python 3
    • django-pyodbc-azure: trabaja para mí hasta ahora
      • EDIT: Parece ser mantenido. Archivado issue 125 preguntando por el estado
      • EDIT: obtuvo la respuesta del responsable. Estará compuesto por al día con Django 2.0 pronto

EDIT: Aquí están las versiones de los paquetes

Django==1.11.6 
django-mssql==1.8 
pyodbc==4.0.19 
django-pyodbc==1.1.1 
django-pyodbc-azure==1.11.0.0 
+1

sería útil proporcionar versiones de Django y las bibliotecas que probó, porque esta información podría quedar rápidamente desactualizada. –

1

Aquí hay una respuesta "moderna" a esta pregunta. Implementé con éxito Django 1.11 en un servidor de producción Ubuntu 16.04 que se conecta a MS SQL Server 2017 ejecutándose en otro servidor.

primer lugar, instale el controlador nativo de MS ODBC "de controladores ODBC 17 para SQL Server":

# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#ubuntu-1404-1604-and-1710 
sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list 
apt-get update 
ACCEPT_EULA=Y apt-get install msodbcsql 
apt-get install unixodbc-dev 

# test you can actually get to port 1433 on the server that is running MS SQL: 
nc -z -v -w5 host.where.sql.server.is.running.com 1433 

# add /opt/mssql-tools/bin to your PATH in .bash_profile, e.g.: 
# PATH="$HOME/bin:$HOME/.local/bin:/opt/mssql-tools/bin:$PATH" 
# source ~/.bash_profile 
# now, test that you can actually connect to MS SQL Server: 
sqlcmd -S host.where.sql.server.is.running.com -U db_username -P db_password 

En segundo lugar, asegúrese de que pip install estos módulos:

# https://github.com/michiya/django-pyodbc-azure 
django-pyodbc-azure==1.11.9.0 

# https://github.com/mkleehammer/pyodbc/wiki 
pyodbc==4.0.22 

En tercer lugar, modificar la entrada BASES DE DATOS de su Django settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'db_name', 
     'USER': 'db_username', 
     'PASSWORD': 'db_password', 
     'HOST': 'host.where.sql.server.is.running.com', 
     'PORT': '1433', 
     'OPTIONS': { 
      'driver': 'ODBC Driver 17 for SQL Server', 
     }, 
    }, 
} 

Estoy omitiendo t El resto de mi configuración (nginx, Gunicorn, Django REST Framework, etc.), pero eso está fuera del alcance de esta respuesta.

Cuestiones relacionadas