Schnellstart: Verbinden von Django mit SQL Server

In diesem Schnellstart erstellen Sie ein Django-Projekt, verbinden es über mssql-django mit einer SQL-Server-Datenbank, führen Sie Migrationen aus und führen grundlegende Datenoperationen mit dem Django-ORM aus.

Voraussetzungen

  • Python 3.8 oder höher. Django 6.0 erfordert Python 3.12 und neuere Versionen.
  • Microsoft ODBC-Treiber 17 oder 18 für SQL Server. Siehe "ODBC-Treiber herunterladen" für SQL Server.
  • Eine SQL Server Instanz oder Azure SQL-Datenbank mit einer gültigen Anmeldung.

Schritt 1: Installieren von mssql-django

Erstellen Sie eine virtuelle Umgebung, und installieren Sie das Paket:

python -m venv .venv
.venv\Scripts\activate
pip install mssql-django

Schritt 2: Erstellen eines Django-Projekts

Erstellen Sie ein neues Django-Projekt und eine neue App:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

Schritt 3: Konfigurieren der Datenbank

Bearbeiten Sie myproject/settings.py und ersetzen Sie die Standardeinstellung DATABASES.

Verbindung mit SQL Server herstellen

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
    },
}

Vorsicht

Verwenden Sie TrustServerCertificate=yes nur für die lokale Entwicklung mit selbstsignierten Zertifikaten. Verwenden Sie sie nicht in der Produktion. Sie deaktiviert die Validierung der Zertifikatskette und erhöht das Risiko eines Man-in-the-Middle-Angriffs. Installieren Sie ein vertrauenswürdiges Zertifikat auf dem Server, und stellen Sie eine Verbindung mit TrustServerCertificate=no.

Herstellen einer Verbindung mit Azure SQL-Datenbank

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",
            "extra_params": "Encrypt=yes",
        },
    },
}

Schritt 4: Definieren eines Modells

Bearbeiten Sie myapp/models.py:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

Fügen Sie "myapp" zu INSTALLED_APPS in settings.py hinzu:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "myapp",
]

Schritt 5: Ausführen von Migrationen

Generieren und Anwenden von Datenbankmigrationen:

python manage.py makemigrations myapp
python manage.py migrate

Vergewissern Sie sich, dass die myapp Migration angewendet wurde:

python manage.py showmigrations myapp

[X] 0001_initial sollte angezeigt werden. Wenn Sie [ ] 0001_initial sehen, führen Sie python manage.py migrate myapp erneut aus, bevor Sie fortfahren.

Schritt 6: Verwenden des Django ORM

Öffnen Sie die Django-Shell. Die Shell ist eine interaktive Python Sitzung mit dem geladenen Django-Projekt, angegeben durch die >>> Eingabeaufforderung.

python manage.py shell

Importieren Sie an der >>> Eingabeaufforderung das Modell:

from myapp.models import Product

Datensatz erstellen:

product = Product.objects.create(name="Widget", price=9.99)
print(f"Created: {product.name} (id={product.pk})")

Datensätze lesen:

for p in Product.objects.all():
    print(f"{p.name}: ${p.price}")

Aktualisieren Sie den Datensatz:

product.price = 12.99
product.save()

Löschen Sie den Datensatz:

product.delete()

Beenden Sie die Shell mit exit(). Alternativ können Sie STRG+Z auf Windows oder STRG+D unter Linux oder macOS verwenden.

Note

Wenn Sie einen Invalid object name 'myapp_product'-Fehler erhalten, existiert die Tabelle myapp_product nicht in der Datenbank, obwohl der Django-Migrationsverlauf angibt, dass 0001_initial angewendet wurde. Beenden Sie die Shell, setzen Sie dann den Migrationsverlauf zurück und wenden Sie die Migration erneut an:

python manage.py migrate myapp zero --fake
python manage.py migrate myapp

Nächster Schritt