Question

Quelqu'un at-il une expérience récente du déploiement d’une application Django avec une base de données SQL Server? Notre poste de travail est fortement investi dans SQL Server et ne prendra pas en charge Django s’il n’existe pas de système d’alimentation suffisamment développé à cet effet.

Je suis au courant de l'utilisation de mssql.django-pyodbc et de django-mssql en tant que support non officiel. Une seule personne semble contribuer aux deux projets, ce qui est un peu inquiétant, bien que les contributions semblent quelque peu régulières.

Existe-t-il d’autres back-ends pour SQL Server qui sont bien supportés? Les deux que j'ai mentionnés ici sont-ils «assez bons» pour la production? Quelles sont vos expériences?

Était-ce utile?

La solution

Comme cela a été dit, django-pyodbc est un bon choix. PyODBC est probablement la bibliothèque SQL Server la plus mature pour Python.

La seule chose qui peut vous poser problème, c’est que pyodbc ne prend pas très bien en charge les procédures stockées (vous pouvez les appeler, mais vous n’avez aucun moyen d’obtenir des résultats). Vous pouvez les appeler à l'aide de pymssql, mais je l'éviterais si possible car il ne prend pas en charge l'interface DB-API standard et peut être sujet à des modifications. Si vous avez besoin de le faire, votre meilleur choix est d’utiliser directement adodbapi (il est inclus dans le package python win32, que vous finirez probablement par installer de toute façon).

Autres conseils

Ces jours

  • django-mssql : s'est traduit par une erreur " NoneType not callable " sur ./manage.py migrate
  • avidal / django-pyodbc : non maintenu. Remplacé par:
    • django-pyodbc : aucune prise en charge de python 3
    • django-pyodbc-azure : fonctionne pour moi jusqu'à présent
      • EDIT: semble ne pas être maintenu. Classé numéro 125 pour en savoir plus sur l'état
      • EDIT: obtenu la réponse du responsable. Sera mis à jour avec Django 2.0 bientôt
      • EDIT: le mainteneur a publié la version 2.0 pour django 2.0
      • EDIT: le mainteneur a publié la version 2.1 pour django 2.1

EDIT: voici les versions du paquet

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

Voici un " moderne " répondre à cette question. J'ai déployé avec succès Django 1.11 sur un serveur de production Ubuntu 16.04 qui se connecte à MS SQL Server 2017 s'exécutant sur un autre serveur.

Commencez par installer le pilote MS ODBC natif " Pilote ODBC 17 pour 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

Deuxièmement, assurez-vous pip install ces modules:

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

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

Troisièmement, modifiez l’entrée BASE DE DONNÉES de votre 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
        },
    },
}

J'omets le reste de ma configuration (nginx, Gunicorn, Framework Django REST, etc.), mais cela n'entre pas dans le cadre de cette réponse.

Mise à jour: elle est en production depuis plus de 6 mois et n'a pas eu de problèmes autres que des impasses spécifiques à MS SQL Server lorsque plusieurs connexions effectuent des requêtes SELECT sur la même table, ce qui a été résolu avec le isolation_level réglage. Le système reçoit environ 2 000 nouveaux utilisateurs chaque jour.

Nous utilisons django-mssql en production dans notre société. Nous avions aussi un système existant utilisant mssql. Pour moi personnellement, c’était la meilleure décision de conception que j’ai jamais prise, car ma productivité a considérablement augmenté maintenant que je peux utiliser django.

J'ai soumis un correctif, mais lorsque j'ai commencé à utiliser django-mssql et à effectuer une ou deux semaines de tests. Depuis (octobre 2008), notre système fonctionne sous django et il fonctionne correctement. J'ai aussi essayé pyodbc mais je n'ai pas trop aimé.

Nous utilisons un système de réparation dans lequel toutes les transactions sont traitées par ce système avec 40 utilisateurs intensifs. Si vous avez plus de questions, faites le moi savoir.

J'ai vu tant de gens recevoir l'erreur suivante après avoir installé django_mssql sous 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 solution installe le plug-in suivant:

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

Je ne l'ai pas encore utilisé en production, mais mes premières expériences avec django-mssql ont été plutôt solides. Tout ce dont vous avez besoin sont les extensions Python Win32 et d’obtenir le module sqlserver_ado sur votre chemin Python. A partir de là, vous utilisez simplement sql_server.pyodbc comme DATABASE_ENGINE. Jusqu'à présent, je n'ai rien remarqué de manquant, mais je ne l'ai pas encore complètement fait non plus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top