conectar con python sql-server django pyodbc

python - conectar - Usando Sql Server con Django en producción



python odbc (6)

¿Alguien tiene experiencia reciente con 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.

Conozco mssql.django-pyodbc y django-mssql como backend extraoficialmente. 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 estén bien soportados? ¿Los dos que mencioné aquí son "lo suficientemente buenos" para la producción? ¿Cuáles son tus experiencias?


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.

Primero, instale el controlador nativo MS ODBC "Controlador 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 pip install siguientes módulos en pip install :

# 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, modifique 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'', ''isolation_level'': ''READ UNCOMMITTED'', # prevent SELECT deadlocks }, }, }

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

Actualización: esto se ha estado ejecutando durante más de 6 meses y no ha tenido más problemas que los bloqueos específicos de MS SQL Server cuando varias conexiones realizan consultas SELECT en la misma tabla, que se corrigió con la configuración isolation_level . El sistema recibe aproximadamente 2k usuarios nuevos cada día.


Como se ha dicho, django-pyodbc es una buena forma de hacerlo. PyODBC es probablemente la biblioteca de SQL Server más madura que existe para Python.

La única cosa con la que puede tener problemas es que pyodbc no admite los procedimientos almacenados muy bien (puede llamarlos, pero no tiene forma de obtener resultados de ellos). Puede llamarlos 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 adodbapi es usar adodbapi directamente (está incluido con el paquete python win32, que probablemente terminará instalando de todos modos).


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 prueba. 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.


Estos días

  • django-mssql : se ha producido el error "NoneType no invocable" al ./manage.py migrate
  • avidal/django-pyodbc : no mantenido. Reemplazado por:
    • django-pyodbc : sin soporte para python 3
    • django-pyodbc-azure : funciona para mí hasta ahora
      • EDITAR: Parece que no se ha mantenido. Presentó el problema 125 preguntando por el estado
      • EDIT: obtuvo respuesta del mantenedor. Se actualizará pronto con Django 2.0
      • EDIT: maintainer lanzó la versión 2.0 para django 2.0

EDITAR: Aquí están las versiones del paquete

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


He visto a mucha gente recibir 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 complemento:

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


Todavía no lo he usado 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 utiliza sql_server.pyodbc como su DATABASE_ENGINE . Hasta ahora no he notado que falta nada, pero aún no lo he golpeado completamente.