Frage

Hat jemand bekommt die jüngsten Erfahrungen mit einer Django-Anwendung mit einem SQL Server-Datenbank-Backend bereitstellen? Unser Arbeitsplatz ist in SQL Server stark investiert und wird Django nicht unterstützen, wenn es nicht ein ausreichend entwickelt ist zurück Ende für sie.

Ich bin mir dessen bewusst mssql.django-Pyodbc und django-mssql als inoffiziell Enden gestützt zurück. Beide Projekte scheinen nur eine Person beitrag zu haben, die ein bisschen eine Sorge ist, obwohl die Beiträge scheinen etwas regelmäßig.

Gibt es noch andere Backends für SQL Server, die gut unterstützt? Sind die beiden, die ich hier erwähnte ‚gut genug‘ für die Produktion? Was sind Ihre Erfahrungen?

War es hilfreich?

Lösung

Wie erwähnt, django-Pyodbc ist ein guter Weg zu gehen. Pyodbc ist wahrscheinlich die reifste SQL Server-Bibliothek für Python ist.

Das einzige, was Sie mit haben Probleme ist, dass Pyodbc nicht gespeicherte Prozeduren unterstützt sehr gut (man kann sich nennen, aber Sie haben keine Möglichkeit, Ergebnisse von ihnen zu erhalten). Sie können nennen sie pymssql, aber ich würde es, wenn überhaupt möglich vermeiden, da es nicht die Standard-DB-API-Schnittstelle nicht unterstützt und Änderungen unterliegen können. Wenn Sie dies tun müssen, ist Ihre beste Wette verwenden adodbapi direkt (mit dem Python-win32-Paket enthalten ist, die Sie wahrscheinlich sowieso am Ende der Installation).

Andere Tipps

In diesen Tagen

  • django-mssql : ergab Fehler "NoneType nicht aufrufbar" auf ./manage.py migrate
  • AVIDAL / django-Pyodbc : unmaintained. Ersetzt durch:
    • django-Pyodbc : keine Unterstützung für Python 3
    • django-Pyodbc-azur : funktioniert für mich so weit
      • EDIT: Es scheint nicht betreut zu sein. Filed Ausgabe 125 über den Status zu fragen
      • EDIT: habe von Maintainer antworten. Wird up-to-date mit Django 2.0 bald
      • gemacht werden
      • EDIT: Maintainer freigegebene Version 2.0 für django 2.0
      • EDIT: Maintainer freigegebene Version 2.1 für django 2.1

EDIT: Hier sind die Paketversionen

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

Hier ist eine „moderne“ Antwort auf diese Frage. Ich zum Einsatz erfolgreich Django 1.11 auf einem Produktions Ubuntu 16.04 Server, der auf einem anderen Server MS SQL Server 2017 ausgeführt verbindet.

Installieren Sie zunächst die native MS ODBC-Treiber "ODBC-Treiber 17 für 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

Zweitens, stellen Sie sicher, dass pip install diese Module:

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

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

Drittens ändern sich die Datenbanken Eingabe Ihrer 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
        },
    },
}

Ich bin Weglassen der Rest meiner Konfiguration (nginx, Gunicorn, Django REST-Framework, etc.), aber das ist nicht in den Anwendungsbereich dieser Antwort.

Update: diese in der Produktion wurden nun für 6 + Monate laufen und hat keine Probleme über MS SQL Server-spezifische Deadlocks haben, wenn mehrere Verbindungen SELECT-Abfragen auf derselben Tabelle zu tun, die mit der isolation_level Einstellung festgelegt wurden. Das System wird über 2k neuen Benutzer jeden Tag.

Wir sind mit django-mssql in der Produktion in unserem Unternehmen. Wir hatten auch ein bestehendes System MSSQL verwenden. Für mich persönlich war es das beste Design Entscheidung, die ich je gemacht habe, weil meine Produktivität dramatisch erhöht jetzt, dass ich django verwenden können.

legte ich einen Patch, aber als ich begann django-mssql mit und eine Woche oder zwei testing.Since tat dann (Oktober 2008) haben wir unser System auf django laufen und es läuft solide. Ich habe auch versucht Pyodbc aber ich wusste nicht, wie viel.

Wir sind ein Reparatursystem ausgeführt wird, wo alle Transaktionen 40 schwere Benutzer durch dieses System laufen. Wenn Sie weitere Fragen haben, lassen Sie mich wissen.

Ich habe so viele Menschen die folgende Fehlermeldung gesehen nach django_mssql unter Windows zu installieren:

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

Die Lösung wird die Installation der folgenden Plugin:

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

Hat es in der Produktion noch nicht benutzt, aber meine ersten Erfahrungen mit django-mssql haben ziemlich solide gewesen. Alles, was Sie brauchen, sind die Python Win32-Erweiterungen und die sqlserver_ado Modul auf Ihren Python-Pfad zu erhalten. Von dort nutzen Sie nur sql_server.pyodbc als DATABASE_ENGINE. Bisher habe ich noch nichts fehlt bemerkt haben, aber ich habe nicht vollständig schlug auf sie noch nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top